{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当前在线广告服务中，广告的点击率（CTR）是评估广告效果的一个非常重要的指标。 因此，点击率预测系统是必不可少的，并广泛用于赞助搜索和实时出价。那么如何计算广告的点击率呢？\n",
    "\n",
    "### 广告的点击率 = 广告点击量/广告的展现量\n",
    "\n",
    "如果一个广告被展现了100次，其中被点击了20次，那么点击率就是20%。\n",
    "\n",
    "今天我们就来动手开发一个移动广告点击率的预测系统，我们数据来自于kaggle，数据包含了10天的Avazu的广告点击数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据\n",
    "\n",
    "你可以在这里<a href=\"https://www.kaggle.com/c/avazu-ctr-prediction/data\">下载</a>移动广告点击数据,由于总数据量达到了4千多万条，数据量过于庞大,为了不影响我们的计算速度,因此我们要从中随机抽样100万条数据，同时我们要对数据的相关字段类型进行重置,这有助于我们以后的计算以及可视化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "import xgboost as xgb\n",
    "import lightgbm as lgb\n",
    "import gzip\n",
    "import random\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  \n",
    "plt.rcParams['axes.unicode_minus'] = False \n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "types_train = {\n",
    "    'id': np.dtype(int), \n",
    "    'click': np.dtype(int),       #是否点击,1表示被点击,0表示没被点击\n",
    "    'hour': np.dtype(int),        #广告被展现的日期+时间\n",
    "    'C1': np.dtype(int),          #匿名分类变量\n",
    "    'banner_pos': np.dtype(int),  #广告位置\n",
    "    'site_id': np.dtype(str),     #站点Id\n",
    "    'site_domain': np.dtype(str),  #站点域名\n",
    "    'site_category': np.dtype(str), #站点分类\n",
    "    'app_id': np.dtype(str),        # appId \n",
    "    'app_domain': np.dtype(str),    # app域名\n",
    "    'app_category': np.dtype(str),  # app分类\n",
    "    'device_id': np.dtype(str),     #设备Id\n",
    "    'device_ip': np.dtype(str),     #设备Ip\n",
    "    'device_model': np.dtype(str),  #设备型号\n",
    "    'device_type': np.dtype(int),   #设备型号\n",
    "    'device_conn_type': np.dtype(int),\n",
    "    'C14': np.dtype(int),   #匿名分类变量\n",
    "    'C15': np.dtype(int),   #匿名分类变量\n",
    "    'C16': np.dtype(int),   #匿名分类变量\n",
    "    'C17': np.dtype(int),   #匿名分类变量\n",
    "    'C18': np.dtype(int),   #匿名分类变量\n",
    "    'C19': np.dtype(int),   #匿名分类变量\n",
    "    'C20': np.dtype(int),   #匿名分类变量\n",
    "    'C21':np.dtype(int)    #匿名分类变量\n",
    "}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1000000\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>click</th>\n",
       "      <th>hour</th>\n",
       "      <th>C1</th>\n",
       "      <th>banner_pos</th>\n",
       "      <th>site_id</th>\n",
       "      <th>site_domain</th>\n",
       "      <th>site_category</th>\n",
       "      <th>app_id</th>\n",
       "      <th>app_domain</th>\n",
       "      <th>...</th>\n",
       "      <th>device_type</th>\n",
       "      <th>device_conn_type</th>\n",
       "      <th>C14</th>\n",
       "      <th>C15</th>\n",
       "      <th>C16</th>\n",
       "      <th>C17</th>\n",
       "      <th>C18</th>\n",
       "      <th>C19</th>\n",
       "      <th>C20</th>\n",
       "      <th>C21</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1636923355</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>85f751fd</td>\n",
       "      <td>c4e18dd6</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>e2a1ca37</td>\n",
       "      <td>2347f47a</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>-1</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-193497663</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>1</td>\n",
       "      <td>e151e245</td>\n",
       "      <td>7e091613</td>\n",
       "      <td>f028772b</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>17747</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1974</td>\n",
       "      <td>2</td>\n",
       "      <td>39</td>\n",
       "      <td>100021</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1315205890</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1002</td>\n",
       "      <td>0</td>\n",
       "      <td>85f751fd</td>\n",
       "      <td>c4e18dd6</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>a37bf1e4</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>21691</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2495</td>\n",
       "      <td>2</td>\n",
       "      <td>167</td>\n",
       "      <td>-1</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1336077603</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1fbe01fe</td>\n",
       "      <td>f3845767</td>\n",
       "      <td>28905ebd</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15701</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>-1</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1368186722</td>\n",
       "      <td>1</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1fbe01fe</td>\n",
       "      <td>f3845767</td>\n",
       "      <td>28905ebd</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>100084</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           id  click       hour    C1  banner_pos   site_id site_domain  \\\n",
       "0 -1636923355      0 2014-10-21  1005           0  85f751fd    c4e18dd6   \n",
       "1  -193497663      0 2014-10-21  1005           1  e151e245    7e091613   \n",
       "2  1315205890      0 2014-10-21  1002           0  85f751fd    c4e18dd6   \n",
       "3  1336077603      0 2014-10-21  1005           0  1fbe01fe    f3845767   \n",
       "4 -1368186722      1 2014-10-21  1005           0  1fbe01fe    f3845767   \n",
       "\n",
       "  site_category    app_id app_domain ...  device_type device_conn_type    C14  \\\n",
       "0      50e219e0  e2a1ca37   2347f47a ...            1                0  15708   \n",
       "1      f028772b  ecad2386   7801e8d9 ...            1                0  17747   \n",
       "2      50e219e0  a37bf1e4   7801e8d9 ...            0                0  21691   \n",
       "3      28905ebd  ecad2386   7801e8d9 ...            1                0  15701   \n",
       "4      28905ebd  ecad2386   7801e8d9 ...            1                0  15708   \n",
       "\n",
       "   C15  C16   C17  C18  C19     C20  C21  \n",
       "0  320   50  1722    0   35      -1   79  \n",
       "1  320   50  1974    2   39  100021   33  \n",
       "2  320   50  2495    2  167      -1   23  \n",
       "3  320   50  1722    0   35      -1   79  \n",
       "4  320   50  1722    0   35  100084   79  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = 40428967  #数据集中的记录总数\n",
    "sample_size = 1000000\n",
    "skip_values = sorted(random.sample(range(1,n), n-sample_size)) \n",
    "parse_date = lambda val : pd.datetime.strptime(val, '%y%m%d%H')\n",
    "\n",
    "with gzip.open('./data/ctr/train.gz') as f:\n",
    "    train = pd.read_csv(f, parse_dates = ['hour'], date_parser = parse_date, dtype=types_train, skiprows = skip_values)\n",
    "print(len(train))\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程\n",
    "\n",
    "接下来我们要做的就是数据的探索性分析(EDA)和特征工程(Feature Engineering),首先我们要确定哪些目标变量，哪些是特征变量,根据kaggle中对数据的描述信息中我们可知,目标变量就是\"click\"字段它表示广告是否被点击过(1表示被点击,0未被点击)，其余所有的字段都是特征变量。在特征变量中C1,C14~C21表示匿名的分类变量(我们不知道它的含义)，其余的特征变量都是和站点,app,设备相关的变量。我们搞清了变量的大概含义以后,接下来我们要分析一下目标变量\"click\"，首先看看它的数据分布情况:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    830365\n",
      "1    169635\n",
      "Name: click, dtype: int64\n",
      "\n",
      "0    0.830365\n",
      "1    0.169635\n",
      "Name: click, dtype: float64\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(train['click'].value_counts())\n",
    "print()\n",
    "print(train['click'].value_counts()/len(train))\n",
    "# train['click'].value_counts().plot(label='dd',kind = 'bar')\n",
    "sns.countplot(x='click',data=train, palette='hls')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在“click”变量的统计数据中，点击的数量大约占17%，未点击的数量大约占83%。也就是说广告的平均点击率大概是在17%左右。\n",
    "\n",
    "接下来我们来分析另外一个关键的特征变量:hour,它可能表示广告被展现的日期+时间，我们要看看不同的日期和时间对广告点击量的影响:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count                 1000000\n",
       "unique                    240\n",
       "top       2014-10-22 09:00:00\n",
       "freq                    11357\n",
       "first     2014-10-21 00:00:00\n",
       "last      2014-10-30 23:00:00\n",
       "Name: hour, dtype: object"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.hour.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "count                 1000000\n",
      "unique                    240\n",
      "top       2014-10-22 09:00:00\n",
      "freq                    11357\n",
      "first     2014-10-21 00:00:00\n",
      "last      2014-10-30 23:00:00\n",
      "Name: hour, dtype: object\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '时间和点击量')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(train.hour.describe())\n",
    "\n",
    "train.groupby('hour').agg({'click':'sum'}).plot(figsize=(12,6))\n",
    "plt.ylabel('点击量')\n",
    "plt.title('时间和点击量')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由上面的统计结果可知数据的开始时间是2014-10-21 00:00:00,结束时间是2014-10-30 23:00:00，一共10天，点击量高峰的时刻是在10月22日和10月28日这两天，10月24日点击量最低。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对Hour的特征工程\n",
    "我们知道hour变量包含了具体的日期和时间,接下来我们想知道点击量和具体的时间是什么关系,此时我们忽略日期,只关注具体时间和点击量。接下来我们从hour变量中抽取时间,然后查看时间和点击量之间的关系:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>click</th>\n",
       "      <th>hour</th>\n",
       "      <th>C1</th>\n",
       "      <th>banner_pos</th>\n",
       "      <th>site_id</th>\n",
       "      <th>site_domain</th>\n",
       "      <th>site_category</th>\n",
       "      <th>app_id</th>\n",
       "      <th>app_domain</th>\n",
       "      <th>...</th>\n",
       "      <th>device_conn_type</th>\n",
       "      <th>C14</th>\n",
       "      <th>C15</th>\n",
       "      <th>C16</th>\n",
       "      <th>C17</th>\n",
       "      <th>C18</th>\n",
       "      <th>C19</th>\n",
       "      <th>C20</th>\n",
       "      <th>C21</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>940121</th>\n",
       "      <td>49763770</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-30 10:00:00</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>a82179f8</td>\n",
       "      <td>62b6befe</td>\n",
       "      <td>3e814130</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>23908</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2741</td>\n",
       "      <td>0</td>\n",
       "      <td>163</td>\n",
       "      <td>-1</td>\n",
       "      <td>17</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>479783</th>\n",
       "      <td>-1721082668</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-25 18:00:00</td>\n",
       "      <td>1005</td>\n",
       "      <td>1</td>\n",
       "      <td>b7e9786d</td>\n",
       "      <td>b12b9f85</td>\n",
       "      <td>f028772b</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>19771</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2227</td>\n",
       "      <td>0</td>\n",
       "      <td>679</td>\n",
       "      <td>-1</td>\n",
       "      <td>48</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>838574</th>\n",
       "      <td>1186530652</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-29 09:00:00</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1fbe01fe</td>\n",
       "      <td>f3845767</td>\n",
       "      <td>28905ebd</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>23161</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2667</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>100148</td>\n",
       "      <td>221</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>344962</th>\n",
       "      <td>-2065125200</td>\n",
       "      <td>1</td>\n",
       "      <td>2014-10-24 04:00:00</td>\n",
       "      <td>1002</td>\n",
       "      <td>0</td>\n",
       "      <td>887a4754</td>\n",
       "      <td>e3d9ca35</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>6563</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>572</td>\n",
       "      <td>2</td>\n",
       "      <td>39</td>\n",
       "      <td>-1</td>\n",
       "      <td>32</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>936566</th>\n",
       "      <td>1805891415</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-30 09:00:00</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>85f751fd</td>\n",
       "      <td>c4e18dd6</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>685d1c4c</td>\n",
       "      <td>2347f47a</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>23224</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2676</td>\n",
       "      <td>0</td>\n",
       "      <td>299</td>\n",
       "      <td>100176</td>\n",
       "      <td>221</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                id  click                hour    C1  banner_pos   site_id  \\\n",
       "940121    49763770      0 2014-10-30 10:00:00  1005           0  a82179f8   \n",
       "479783 -1721082668      0 2014-10-25 18:00:00  1005           1  b7e9786d   \n",
       "838574  1186530652      0 2014-10-29 09:00:00  1005           0  1fbe01fe   \n",
       "344962 -2065125200      1 2014-10-24 04:00:00  1002           0  887a4754   \n",
       "936566  1805891415      0 2014-10-30 09:00:00  1005           0  85f751fd   \n",
       "\n",
       "       site_domain site_category    app_id app_domain  ...  device_conn_type  \\\n",
       "940121    62b6befe      3e814130  ecad2386   7801e8d9  ...                 0   \n",
       "479783    b12b9f85      f028772b  ecad2386   7801e8d9  ...                 0   \n",
       "838574    f3845767      28905ebd  ecad2386   7801e8d9  ...                 0   \n",
       "344962    e3d9ca35      50e219e0  ecad2386   7801e8d9  ...                 0   \n",
       "936566    c4e18dd6      50e219e0  685d1c4c   2347f47a  ...                 2   \n",
       "\n",
       "          C14  C15 C16   C17  C18  C19     C20  C21  time  \n",
       "940121  23908  320  50  2741    0  163      -1   17    10  \n",
       "479783  19771  320  50  2227    0  679      -1   48    18  \n",
       "838574  23161  320  50  2667    0   35  100148  221     9  \n",
       "344962   6563  320  50   572    2   39      -1   32     4  \n",
       "936566  23224  320  50  2676    0  299  100176  221     9  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['time'] = train.hour.apply(lambda x: x.hour)\n",
    "train.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '时间和点击量')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby('time').agg({'click':'sum'}).plot(figsize=(12,6),grid=True)\n",
    "plt.ylabel('点击次数')\n",
    "plt.title('时间和点击量')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看到点击量的高峰大约是在每天下午的13点到14点之间 ,点击量的最低点是在每天的零点左右。这应该是合理的，因为下午1点到2点应该是人们精力最旺盛的时候，而晚上零点大部分人都进入了梦乡。\n",
    "\n",
    "接下来我们要查看一下在不同的时间点的情况下，广告的展现量和点击量的关系:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['time', 'click']).size().unstack().plot(kind='bar', figsize=(12,6))\n",
    "plt.ylabel('数量')\n",
    "plt.title('展现量与点击量');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们将时间按每个时间点展开,这里没有特别之处下午1点的展现量最大,所以点击量也是最大,我们发现展现量和点击量似乎是成正比的。这似乎也告诉我们，如果您要投放在线广告，请在下午1点至2点之间投放,因为此时广告的展现量和点击量都是最大的。\n",
    "\n",
    "接下来我们来计算一下各个时间点的广告点击率，并查看点击率的数据分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time</th>\n",
       "      <th>impressions</th>\n",
       "      <th>clicks</th>\n",
       "      <th>CTR</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>21234</td>\n",
       "      <td>3793</td>\n",
       "      <td>17.862861</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>24463</td>\n",
       "      <td>4534</td>\n",
       "      <td>18.534113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>30313</td>\n",
       "      <td>5388</td>\n",
       "      <td>17.774552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>34386</td>\n",
       "      <td>5999</td>\n",
       "      <td>17.446054</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>47211</td>\n",
       "      <td>7543</td>\n",
       "      <td>15.977209</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   time  impressions  clicks        CTR\n",
       "0     0        21234    3793  17.862861\n",
       "1     1        24463    4534  18.534113\n",
       "2     2        30313    5388  17.774552\n",
       "3     3        34386    5999  17.446054\n",
       "4     4        47211    7543  15.977209"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_click = train[train['click'] == 1]\n",
    "df_hour = train[['time','click']].groupby(['time']).count().reset_index()\n",
    "df_hour = df_hour.rename(columns={'click': 'impressions'})\n",
    "df_hour['clicks'] = df_click[['time','click']].groupby(['time']).count().reset_index()['click']\n",
    "df_hour['CTR'] = df_hour['clicks']/df_hour['impressions']*100\n",
    "df_hour.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '点击率的时间分布')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAAF+CAYAAACmt13YAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xu4red8L/zvTxIliRIsCYpUd1SzK1HvQlJSoc50O+VtetTNjmi2437pS4va1KG26lWHCikXadqmNF40LU2RhCDIikOow75oaaPCUpqgJZX83j/Gs7ZpmnOtlZX7GWutuT6f6xrXesYz7uf+3c9Mxpjfcc97PKO6OwAAwLVznd09AAAA2AgEawAAGECwBgCAAQRrAAAYQLAGAIABBGuADaCqao19+++OsQDsqwRrgAGq6gNVda+dbPvCqvrv16DvZ1fVr+yg2TFV9Y5V+95dVXfa2Tor6v19VR2xat8Lqup20/b1qmq/nezr9tO/t92Zn09VXaeq3l1Vt7mm4wbY3cxmAIzx7ST/se1OVV0nyf7dfeUabb+TZK392459bZIjklw97bpVkgOr6qTp/n5JvtrdD1tx2B2SvG9FHzdKctMkH1nV96YkKwP4hd19yqoh/MfKc5lcluSNVfXTSS5K8h9V9d3psesmuW53335VrQcleVFV3SFJJzmtqo7q7n9b79yTPCDJgd39he20AdgjlS+IAbj2qur8JIcl+ea06zpJPtzdJ1XVzyf5nST/Pj12WBbB+mvT/QOSPKm73zn1ddsk/9bdl02zxK9Jcp8k1+nuf6+q/5zkqu7+9NT+7CR3nvq/PMnzkvxwkhcm+ca2mt19cFUdluQD3X14VR2f5DeS/HGSQ5JclUUAfm6SlyX5UHefW1X/M8nvJzmyuz+wxrkfnuSt3X30in3XSfKBJM/v7rdO+16W5HrdffKKdscmOXP6uX03ye2SfGnFuJOkspgIelx3n7/Wzx9gT2DGGmCck7r7vWvsf1OSN3X3VUkyBdVLu/s10/3rZhFqt7lbkqdU1cOT/EGS30pycpK7V9Uzk7wxi/D86an9jyW5fXf/a1U9L8kNkvxakp/p7s9MNT43tV1ZZ9v9yuKNwLYZ8m0zLtvWbZ+URdC+cVVtWXX8k5NcuuKYbZ6a5PJtoXryW0k+UFUvSfLUXrgwyeHTGH8xyaO7+z5V9ZokT9zB7DbAHkWwBthFVfW+JIfme7PUr5g+Q3j9JF/v7mOSZFugXs/q5SLdfUZV/e8kxyW5RZKXJNma5MQkt09ycne/b8UhV+f73WPRzSJUr2pzdZJbVNVHkxyc5BPd/edV9Z+6+7PTeT0pyZ9096XTMd+djjs4yXu7+8lTu9dP57r65/KzWQTuu606r29O66zfkeQ9VXXSiuB/eBaz+veZmt8zPxjWAfZoPrwIsOu+k8Us9R1X3rIIwFcmSVU9rao+UlVbtt2ymH1+5sp9U5tTpmNuMPXxmSxmrD86HXNekusl+d1p3fJ6PjT1/9oV+1YG63+exnnSVO+Hk5xbVT+xg/O9OskvrjiPB2dV+J3GflqSZyW5sKour6orqurSqro0yeeT/GEWs+3bZvBvnuSvk9wmyZun0P8jWcxuf7Sqvjat1wbYownWALtuh6+h3f2iLNY/n93dm7t7cxbB83nT9l2TnNfdP9Xdp05X27ggi+B5RJKnJLljktcn+YckD8tiXfRJq0pdMAXSk7JYn/3eJP+5qu63ozF39xVZrMd+zE6c85krzuOv1ujrG0l+ortf292HJXl1kmd19490948keU+ST3f3Y7r7s1V1dJL3Tu2+vOLNyT8lueu0/ZfZzoc9AfYUloIA7LrPJ/mDNS4hnSQf37bR3d+tqv+R5DmrG3X3VVX1mCzCcrJY13zP7v76dP+Mad30ZVmEz6unYy6uqv27e9uVOY5bscZ6m5ckeWRVvTvfW66yX75/Kcinpv2v6h1/mn2tNxI/cPKrlrbcI8mTVty/ZRZrsre5PMlvdfcbqur/3U5ty0KAPZ5gDbALqupnsri83WOS3LG7L5qu5nFgd3+iqn62qg7r7suuYdcPSvL0qvrOin0/msWM7QlT7WQRkP8wyZ9vp683ZzHbe6MkV0z79su0FGS6KsjTksWC7J0Y27eT3GvFBxh/KIuZ9DVV1UOS7LfqSiI3T/LFbXe6+/NZvEFJ1gju0wc7b5LFOm+APZpgDbBrfiPJ2UlumOSvquo/JfnxJL+d5Ngsln88NsnPV9UPJTl4RSC9RZIrq+rXp/v/Z9Z3uorGyitpZNuMdXe/Yp2xHJDFUpCrsriU37Om/Vdn8Tp//ySfnfZ9J8nfTtvvyfdf+/rGWaxtXh1kD8jiUn9/mUVQ/z7Tco7vrtr3kCSvTPLQ6f4PJ/nJJN/u7u+s7mPyQyu295/qXpLFm4JL1jkGYI8hWANcQ1X141l8IcsjuvvKqjo3yd26++1V9ZtVdWQWyzA+VVVHdvcns53X26r69g5KHjDd1vPiJGd093emkLvtetmHZjGr/YEs1mqnu7+WxQch091X5/uvKHJ1kj9KcvqqmfYbZPElMGuN/YQsroP94hX7Xprk3kn+S3dfPO3+9SSPzOKSe+u5xYrtA7L4md2uu1d/WQ3AHskXxADsgqo6qLu/NW1fZwqpq7cP3OjXYa6q62Wx3ONbK/bdIIuZaYEY2KcI1gAAMIDL7QEAwACCNQAADLDXfnjxpje9aR9++OG7exgAAGxwF1988Ve7e9OO2u21wfrwww/Pli1bdtwQAACuhar6ws60sxQEAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAG2H93D2Bv9OVTXzxLv4ee8huz9AsAwPzMWAMAwACCNQAADCBYAwDAAII1AAAMIFgDAMAAgjUAAAwgWAMAwACCNQAADOALYgBgL/PEN//TbH2/7GG3mq1v2OgEa9hAnv+G+83W9zNOPGe2vgFgI9gQwXrrqX8yS7+bTvmVWfoFYGM54U0fnq3vsx5xp9n6BsayxhoAAAbYEDPWG90/vuyEWfq99RPPmqVfAIB9kRlrAAAYYJYZ66o6NMlZ3X1cVT0nyT2mhw5Lcnp3v3CNY26Z5INJPjvt+r+7e+sc4wMAdt5r/r+vzNb3SQ+/2Wx9w7IND9ZVdUiS05MclCTd/ewVj52V5I/XOfSuSZ7f3aeOHhMAAMxtjqUgVyU5MckVK3dW1Z2TXNrdX1znuGOSnFRVH66qF8wwLgAAmM3wGevuviJJqmr1Q09K8uwfOOB73p7kd5L8W5J3VtVR3X3JygZVdXKSk5Pk1re+9aghs8pFr/65Wfq982PPnqVfgLU89Kx3zdLvW0742Vn6BfZ+S/nwYlXdKMnNuvtz22n2/u7+RndfleQjSY5Y3aC7T+vuzd29edOmTXMNFwAArrFlXRXkIUnetoM251TVzavqwCT3TfKJ+YcFAABjLOs61vdL8nvb7lTVvZIc2d2vWNHmOUnOS3Jlkld192eWNDaAPcKD3nTaLP3+9SNOnqVfAL7fbMG6u49fsf1Lqx47N8m5q/adl+T2c40HAADm5JsXAQDYa33lFW+fpd+bPf4B1/gY37wIAAADCNYAADCAYA0AAANYYw3AUvzcWW+Zpd+zT3joLP0CXFOCNcA+6sFn/eks/f7VCb88S78AezrBGgDYo7z9DV+dre8HnHjT2foGa6wBAGAAwRoAAAawFAQAYIk+/weXzdLv4U8+bJZ+2XmCNczo1Wfcb7a+H/ur58zWNwBwzVkKAgAAAwjWAAAwgGANAAADCNYAADCADy8CADDMl1964Sz9HvqkY2fpdyTBGthlj3rz/Wfr+3UP+5vZ+gaAOQjWwF7jgW95yiz9vu2hL5mlX4A9wWUv+fQs/R72lNvP0u/eTLBmn/KG1803w3rio8ywAsC+TLAGWMeD3vziWfr964f9xiz9Arvmotd9ZZZ+7/yom83SL3suwZrd7pzXPnCWfu/33942S78AAGtxuT0AABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhglmBdVYdW1QXT9i2r6tKqOn+6bdrOca+tqgur6plzjAsAAOYyPFhX1SFJTk9y0LTrrkme393HT7et6xz38CT7dfexSW5bVUeMHhsAAMxljhnrq5KcmOSK6f4xSU6qqg9X1Qu2c9zxSd44bf9tkruvblBVJ1fVlqrasnXrmvkcAAB2i+HBuruv6O7LV+x6exah+c5Jjq2qo9Y59KAkX5y2v5bk0DX6Pq27N3f35k2b1l1RAgAAS7eMDy++v7u/0d1XJflIkvWWeHwzyfWn7YOXNDYAABhiGeH1nKq6eVUdmOS+ST6xTruL873lH0cn+fwSxgYAAEPsv4Qaz0lyXpIrk7yquz9TVUcm+aXuXnn1j7ckuaCqbpHkAVmszQYAgL3CbMG6u4+f/j0vye1XPfbJJM9cte+Kqjo+yX2S/K9V67QBAGCPtowZ653W3V/P964MAgAAew0fEAQAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAQRrAAAYQLAGAIABBGsAABhAsAYAgAEEawAAGECwBgCAAWYJ1lV1aFVdMG3fuqrOr6pzq+q0qqp1jrllVV06tT2/qjbNMTYAAJjD8GBdVYckOT3JQdOuxyY5pbvvleRWSe6wzqF3TfL87j5+um0dPTYAAJjLHDPWVyU5MckVSdLdz+juT02P3STJV9c57pgkJ1XVh6vqBWs1qKqTq2pLVW3ZulXuBgBgzzE8WHf3Fd19+er9VXVikr/r7n9e59C3Jzk+yZ2THFtVR63R92ndvbm7N2/aZKUIAAB7jv2XUaSqbpvkqUnuvZ1m7+/u70ztP5LkiCSXLGF4AABwrc1+VZBpzfWZSR691kz2CudU1c2r6sAk903yibnHBgAAoyxjxvrpSW6d5OXTBUGenWS/JEd29ytWtHtOkvOSXJnkVd39mSWMDQAAhpgtWHf38dO/T0vytDWanLuq/XlJbj/XeAAAYE6+IAYAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBggFmCdVUdWlUXTNsHVNXZVfW+qnr0do7ZqXYAALAnGh6sq+qQJKcnOWja9YQkF3f33ZKcUFU3WOfQnW0HAAB7nO0G66rar6ruV1X3XLGvquqE7Rx2VZITk1wx3T8+yRun7fck2bzOcTtsV1UnV9WWqtqydevW7Q0dAACWav8dPP5nSb6V5OCqeliSzyU5Kcm7kpy11gHdfUWSVNW2XQcl+eK0/bUkh65Ta4ftuvu0JKclyebNm3sHYwcAgKXZUbC+VXf/dC1S8j8keWWS47r7X69BjW8muX6Sy5McPN2/Nu0AAGCPs6M11terqmOTHJvFLPJ7kxxZVT99DWpcnOTu0/bRST5/LdsBAMAeZ0cz1h9LcvKK7cdM253k/TtZ4/Qkb6uq45IcmeSDVXWvJEd29yu2124n+wcAgN1uR8H6Ld391l3puLuPn/79QlXdJ4vZ6N/u7quSnDvdVrZfqx0AAOwVdrQU5EkjinT3P3f3G7v78hHtAABgT7OjGetjqup/J6ksln9su9RHd/ftZh0ZAADsRXYUrD/Y3ffcQRsAANjn7WgpyFlV9eSqelCSVNVTq+q/V9X1lzA2AADYa+woWN8rybeTfHK6/+4kByY5c85BAQDA3mZHS0EO6+5XbbvT3RcluWj6FkYAAGCyo2D9rqo6N8nbsviCmIOT3CfJlrkHBgAAe5PtBuvu/u3pmxfvl+THklyR5I+6+y+XMTgAANhb7GjGOt19YZILlzAWAADYa+3ow4sAAMBOEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAG2H8ZRarqlCQnTndvlOSD3f3YVW32T/L30y1JntDdH1/G+AAA4NpaSrDu7lOTnJokVfXyJKev0eyoJGd299OWMSYAABhpqUtBquqWSQ7t7i1rPHxMkgdX1Yeq6rXTDPbq40+uqi1VtWXr1q2zjxcAAHbWstdYPy7TzPUaLkpy7+6+S5IDkjxwdYPuPq27N3f35k2bNs04TAAAuGaWFqyr6jpJ7pnk/HWaXNLdX5q2tyQ5YhnjAgCAEZY5Y31cFh9a7HUeP6Oqjq6q/ZI8NMnHljc0AAC4dpYZrO+X5D1JUlVHVtXzVj3+3CRnJPlokgu7+51LHBsAAFwrS7kqSJJ092+t2P5kkmeuevwTWVwZBAAA9jq+IAYAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBggNmDdVXtX1X/WFXnT7c7rNPuOVV1UVX94dxjAgCA0ZYxY31UkjO7+/jp9vHVDarq/0py9yR3SfKVqrr3EsYFAADDLCNYH5PkwVX1oap6bVXtv0abeyR5U3d3knOSHLdWR1V1clVtqaotW7dunXHIAABwzSwjWF+U5N7dfZckByR54BptDkryxWn7a0kOXauj7j6tuzd39+ZNmzbNMlgAANgVa80ej3ZJd39n2t6S5Ig12nwzyfWn7YPjQ5UAAOxllhFgz6iqo6tqvyQPTfKxNdpcnMUa6yQ5OsnnlzAuAAAYZhnB+rlJzkjy0SQXJvlwVb1mVZv3JvmpqnppkqcnOXMJ4wIAgGFmXwrS3Z/I4sogK520qs3V05VAHpTkpd39D3OPCwAARlrGGuud0t3/nuSs3T0OAADYFT4kCAAAAwjWAAAwgGANAAADCNYAADCAYA0AAAMI1gAAMIBgDQAAAwjWAAAwgGANAAADCNYAADCAYA0AAAMI1gAAMIBgDQAAAwjWAAAwgGANAAADCNYAADCAYA0AAAMI1gAAMIBgDQAAAwjWAAAwgGANAAADCNYAADCAYA0AAAMI1gAAMIBgDQAAAwjWAAAwgGANAAADCNYAADCAYA0AAAMI1gAAMIBgDQAAAwjWAAAwwP5zF6iqGyb58yT7JflWkhO7+8pVbfZP8vfTLUme0N0fn3tsAAAwyjJmrH85ye93932TXJbk/mu0OSrJmd19/HQTqgEA2KvMPmPd3a9ccXdTkq+s0eyYJA+uqnsm+XiSx3b3d+ceGwAAjLK0NdZVdWySQ7r7A2s8fFGSe3f3XZIckOSB6/RxclVtqaotW7dunXG0AABwzSwlWFfVjZO8PMmj12lySXd/adrekuSItRp192ndvbm7N2/atGmGkQIAwK6ZPVhX1XWT/EWS3+zuL6zT7IyqOrqq9kvy0CQfm3tcAAAw0uxrrJP8tyR3SvKMqnpGkvOSHNDdz1zR5rlJ/ixJJfnL7n7nEsYFAADDLOPDi6cmOXUHbT6RxZVBAABgr+QLYgAAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGAAwRoAAAYQrAEAYADBGgAABhCsAQBgAMEaAAAGEKwBAGCApQXrqnptVV1YVc+8Nm0AAGBPtJRgXVUPT7Jfdx+b5LZVdcSutAEAgD1Vdff8RapeluRvuvttVfULSa7f3a/bhTYnJzl5uvvjST6zC8O5aZKv7sJxu0o99fbUehv53NRTT73dV28jn5t6+26923T3ph012n8XOt4VByX54rT9tSR32pU23X1aktOuzUCqakt3b742fain3kaot5HPTT311Nt99Tbyuamn3o4sa431N5Ncf9o+eJ26O9MGAAD2SMsKrxcnufu0fXSSz+9iGwAA2CMtaynIW5JcUFW3SPKAJL9QVc/r7mdup80xM43lWi0lUU+9DVRvI5+beuqpt/vqbeRzU0+97VrKhxeTpKoOSXKfJO/p7st2tQ0AAOyJlhasAQBgI/MBQXZZVd24qu5TVTfd3WMBNp6qunlV3buqbrC7xwJsDHNnl30qWC/7mx2r6tCqumBJtW5YVW+vqr+tqjdX1XVnrndIkr9Kcpck51XVDq/tOKDmoVX1kSXU2b+q/rGqzp9ud5i75lT3lVX1c0uoc8qKc/toVb165nqHVNXbqmrL3LWmej9aVX9dVRdU1UtmrvV/nuNVdUBVnV1V76uqR89db7r/E1X11jlqra5XVbee/p85t6pOq6qaud7tkrwhyd2SvHuO17S1XqOr6ier6h1z1qqqW1bVpSueh8NfP9c5t7Or6o6ja62uV1XPWXFun66q35y53m2r6l3T69mzRtdao96dquqd03P9KYPr/MDv8jmzyzr1Zssua9SbNbus0f+hmTm77DPBupb8zY5T8Dw9i+tzL8MvJ/n97r5vksuS3H/mekcl+X+6+/lJzsna1yYf7ffyvUsyzumoJGd29/HT7eNzF6yq45Ic1t1nz12ru0/ddm5JLkjyRzOX/NUkfzpdN/QGVTX39UpflOR3uvu4JD9SVcfPUWSN5/gTklzc3XdLckINnmVdXa+qfizJi5PccGSd9eoleWySU7r7XklulWToG8416h2V5FHd/Zwkf5/kR2eul+nNwu8nOWDmWndN8vwVrzFbZ66XqvrlJJ/r7o+OrLVWve5+9orXmE8k+eM56yV5fJLf7u47Jrnf6LC0Rr2XJ3lUFlcye0RVjfx/c/Xv8l/IvNlldb1fzLzZZXW9X8u82WV1vV/PzNllnwnWSY5P8sZp+2/zvUv7zeWqJCcmuWLmOkmS7n5ld2+bZdmU5Csz13t3d3+gqn4mi3d+F85Zr6ruleRbWTwx5nZMkgdX1YemmYJZr55TVQdkEW4/X1UPmbPWqrq3THJod2+ZudS/JPnJqrpRFoHsn2aud7skH562v5KZgmd+8Dl+fL73GvOeJKPfQKyu940kjxhcY9163f2M7v7U9NhNMv6b0lbXOyvJF6rqQUkOSfLZOetNHpXkvMF11qp1TJKTqurDVfWCuetV1Y2TvCTJ16vqnnPX26aq7pzk0u7+4ppHjav3L0mOmmYjfyjJv85c78bd/U+9+JDavyT54VGF1vhd/iuZMbusUe8fMmN2WaPeh+bMLmvUO2fu7LIvBevV3+x46JzFuvuK7r58zhprqapjkxzS3R9YQq3K4gn49ST/MWOd6yZ5VpKnz1VjlYuS3Lu775LFzNUDZ673yCSfTPK/ktylqp4wc71tHpfk1CXUeW+S2yR5YpJPZfH8m9NZSZ5di2U190/yrjmKrPEcn/U1ZnW97v5Kd39nZI3t1dumqk5M8nfd/c9LqHdwkp9P8oUkQz9pv7peVd0kixDzeyPrrFUryduzeCN25yTHVtVRM9f7H0n+Ismrkzyyqv7LzPW2eVIWs7tDrVHvb7J4s/LEJOcm+e7M9d5XVY+vql9KcniSS0bWS773uzyLiYjZs8uK7PCeZWSX1Vll7uyysv+5s8u+FKw3/Dc7TrMSL08yy/rO1XrhcVm8qAx9oV7l6Ule2d2jZyHWc0l3f2na3pJk1mVDSX4qyWnTJSb/JMkcM0rfp6quM9U5f+5aSZ6d5Ne7+7lJPp3FrOBsuvt5WQSXk5Kc3t3fnLPeCvvCa8xtkzw1yZOXUa+7/7W7fy2LN7h3nrnc7yb5ze6ebZJghfd39ze6+6okH8lyXmP+cHqNeWMWoX5W01+obtbdn5u7Vha/I/5rdz8ji+fgfWau99gsXssen+RFPfjyaqt+l8/+urLs7LC63tz1V/c/d3bZcC/827Ghv9lxmtX9iyx+MXxhCfWeVlWPnO7eKOP/9LbSvZM8rqrOT3LHqnrNjLWS5IyqOrqq9kvy0CQfm7neZ5PcdtrenMXs3NyOS/LB0b8Q1nFIkjtMP8+7ZvDM4zo+muTWWayXXZaN/hpzSJIzkzx6STNap05/rk3mf41JknskedGK15nnzVjrnFpc8eTAJPfNYh3ynHbHa8xDkrxtCXWSxfr7W1XV9bJYMzvra8z0hugz090/Hdn3Gr/LZ31d2Q3Z4fvqzV1/jXrzZ5fu3iduWayB+lgWv2g/leSGS6p7/pLqnJLFnzXOn24nzlzvkCTvyGIt6SszXRN9I/w8k/xkFu9kP57FB4zmrneD6Yn/nizWe91yCTVfkOThS/pvdpckf5fFzMs7khy8hJrPSfKrSzq/86d/bzOd50uzWE6035z11rs/4/m9KMmXVrzG3GPmej+axTKiC5I8a+7zW8bPdMW53TOLGc9Lkjx+Cf/tbpFFyH3f9By8wdw/yyR/luROc53bqvN7UBYfcP1GFm/+Zn/uZfEBv+NmqLH6d/lw1agiAAABZUlEQVSvzZld1ssOMz4HVtd79lr15zy/zJxd9qkviCnf7AjMqKpukcXs0jm9Gz5jAWw8ssveZZ8K1gAAMJd9aY01AADMRrAGAIABBGsAABhAsAbYIKrqjlV1x1X7/mB3jQdgX+PDiwAbRFX91yTp7tfv3pEA7JsEa4ANoKpemORh090vdvfPTvvP7+7jp+2Lk3wlyZVJDkvyuiRvTvL6JDdMcnZ3v3C5IwfYOARrgA1irRnrVcH6U1l8NfjHs/hG02cmuTzJR7v79VX1wSQP7O5/We7IATYGa6wB9h1f7u5vZvGV1lclqSQ/nuSU6au8D8riW/oA2AX77+4BADDMvye5SZJUVfXO/UnyM0ne2t3nVdWvJPnanAME2MjMWANsHO9I8vCqel+S43bymN9N8tTpmPsn+fJcgwPY6KyxBgCAAcxYAwDAAII1AAAMIFgDAMAAgjUAAAwgWAMAwACCNQAADPD/A5g8CWURZ9wtAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,6))\n",
    "sns.barplot(y='CTR', x='time', data=df_hour)\n",
    "plt.title('点击率的时间分布')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在这里我们发现了一件有趣的事，广告点击率最高的时间点居然在凌晨1点，上午7点，下午16点，而从之前的分析中我知道广告展现量最高的时间点是在下午的13点， 但是从上图中我们可知13点的广告点击率并非是最高的。这似乎说明高的展现量和高的点击量并不意味着就有高的点击率。凌晨1点上网的“夜游神”们才是点击率的真正贡献者。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 按星期特征工程\n",
    "\n",
    "前面我们我们已经分别实现了按日期和按时间两种方式来分析点击率,接下来我们再继续扩展对hour变量的分析,这回我们要按星期来分析点击率。我们首先要把hour变量转换成星期。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: `weekday_name` is deprecated and will be removed in a future version. Use `day_name` instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '星期的点击量')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train['day_of_week'] = train['hour'].apply(lambda val: val.weekday_name)\n",
    "cats = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n",
    "train.groupby('day_of_week').agg({'click':'sum'}).reindex(cats).plot(figsize=(12,6))\n",
    "ticks = list(range(0, 7, 1)) \n",
    "labels = \"周一 周二 周三 周四 周五 周六 周日\".split()\n",
    "plt.xticks(ticks, labels)\n",
    "plt.title('星期的点击量')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '星期的展现量和点击量分布')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "train.groupby(['day_of_week','click']).size().unstack().reindex(cats).plot(kind='bar', title=\"Day of the Week\", figsize=(12,6))\n",
    "ticks = list(range(0, 7, 1)) \n",
    "labels = \"周一 周二 周三 周四 周五 周六 周日\".split()\n",
    "plt.xticks(ticks, labels)\n",
    "plt.title('星期的展现量和点击量分布')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可知星期二的展现量和点击量是最高的，接下来是星期三和星期四，不过展现量和点击量较高并不意味着点击率也较高，因此接下来我们要按星期来计算一下点击率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '星期的点击率')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "df_click = train[train['click'] == 1]\n",
    "df_dayofweek = train[['day_of_week','click']].groupby(['day_of_week']).count().reset_index()\n",
    "df_dayofweek = df_dayofweek.rename(columns={'click': 'impressions'})\n",
    "df_dayofweek['clicks'] = df_click[['day_of_week','click']].groupby(['day_of_week']).count().reset_index()['click']\n",
    "df_dayofweek['CTR'] = df_dayofweek['clicks']/df_dayofweek['impressions']*100\n",
    "\n",
    "plt.figure(figsize=(12,6))\n",
    "# sns.set(style=\"whitegrid\")\n",
    "sns.barplot(y='CTR', x='day_of_week', data=df_dayofweek, \n",
    "            order=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'])\n",
    "plt.title('星期的点击率')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过之前的我们知道星期二和星期三有着最高的展现量和点击量，可是他们的点击率却是最低的。相反星期六和星期天却有着最高的点击率。这是否说明星期六和星期天是人民群众最空闲的时候，有了空闲时间大家才会想到去购物，所以广告的点击率才会是最高的？\n",
    "\n",
    "通过对数据的严谨分析，我们就会从中发现人民群众的日常行为举止以及他们的活动规律都会在数据中得到体现，只要你足够努力，就可以让数据说话！"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 匿名特征变量C1\n",
    "\n",
    "C1是一个匿名的分类型变量，我们不知道它的含义，我们先查看一下c1的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1005    0.918282\n",
      "1002    0.055076\n",
      "1010    0.022543\n",
      "1012    0.002868\n",
      "1007    0.000855\n",
      "1001    0.000239\n",
      "1008    0.000137\n",
      "Name: C1, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(train.C1.value_counts()/len(train))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因为C1是分类型变量，它的值包含了1005,1002,1010,1012,1007,1001,1008七种，其中1005的所占比例高达91.87%，接下来我们看看C1的不同的值对点击率的贡献"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " C1 value: 1001,  点击率: 0.03347280334728033\n",
      " C1 value: 1002,  点击率: 0.21112644345994624\n",
      " C1 value: 1005,  点击率: 0.16909838154292473\n",
      " C1 value: 1007,  点击率: 0.03976608187134503\n",
      " C1 value: 1008,  点击率: 0.1386861313868613\n",
      " C1 value: 1010,  点击率: 0.09754691034911059\n",
      " C1 value: 1012,  点击率: 0.16283124128312412\n"
     ]
    }
   ],
   "source": [
    "C1_values = train.C1.unique()\n",
    "C1_values.sort()\n",
    "ctr_avg_list=[]\n",
    "for i in C1_values:\n",
    "    ctr_avg=train.loc[np.where((train.C1 == i))].click.mean()\n",
    "    ctr_avg_list.append(ctr_avg)\n",
    "    print(\" C1 value: {},  点击率: {}\".format(i,ctr_avg))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面的统计结果可知,虽然1005数据量所占比重最高,但是它的点击率并不是最高,1002的点击率最高达到了21.3%。接下来我们看一下C1的展现量和点击量的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['C1', 'click']).size().unstack().plot(kind='bar', figsize=(12,6), title='C1 展现量和点击量分布');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可知，1005的展现量和点击量是最高的，但这并不意味着点击率也是最高的，下面我们看一下C1的点击率的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'C1的点击率分布')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_c1 = train[['C1','click']].groupby(['C1']).count().reset_index()\n",
    "df_c1 = df_c1.rename(columns={'click': 'impressions'})\n",
    "df_c1['clicks'] = df_click[['C1','click']].groupby(['C1']).count().reset_index()['click']\n",
    "df_c1['CTR'] = df_c1['clicks']/df_c1['impressions']*100\n",
    "\n",
    "plt.figure(figsize=(12,6))\n",
    "sns.barplot(y='CTR', x='C1', data=df_c1)\n",
    "plt.title('C1的点击率分布')"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看到点击率最高的并不是1005，而是1002. 它的点击率达到了21%，下面我们总结一下C1数据量和点击率的分布:\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "从上表中我们可以看出,1002的数据比例是5.5%，它贡献的点击率为21.33%远大于17%的平均点击率，1002的数据比例为0.28%却贡献了17.66%的点击率，1008的数据比例是0.01%，它贡献了14.84%的点击率，性价比非常高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## banner_pos\n",
    "banner_pos表示广告在网页中的位置，广告摆放在网页的不同位置可能会带来不同的点击量和点击量，下面我们就来分析一下banner_pos这个分类型变量。首先我们查看一下banner_pos的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0.719386\n",
      "1    0.278839\n",
      "7    0.001117\n",
      "2    0.000309\n",
      "4    0.000162\n",
      "5    0.000137\n",
      "3    0.000050\n",
      "Name: banner_pos, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(train.banner_pos.value_counts()/len(train))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面的统计结果可知banner_pos包含了7个值,它可能代表网页中的7个不同位置，其中位置0和位置1占据了机会99%的数据比例，也就是说绝大多数广告都房子了位置0或者位置1的地方。\n",
    "\n",
    "下面我们看看不同位置对点击率的贡献:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " banner 位置: 0,  点击率: 0.164067691058764\n",
      " banner 位置: 1,  点击率: 0.18354677788975\n",
      " banner 位置: 2,  点击率: 0.12297734627831715\n",
      " banner 位置: 3,  点击率: 0.16\n",
      " banner 位置: 4,  点击率: 0.1419753086419753\n",
      " banner 位置: 5,  点击率: 0.1386861313868613\n",
      " banner 位置: 7,  点击率: 0.3034914950760967\n"
     ]
    }
   ],
   "source": [
    "banner_pos = train.banner_pos.unique()\n",
    "banner_pos.sort()\n",
    "ctr_avg_list=[]\n",
    "for i in banner_pos:\n",
    "    ctr_avg=train.loc[np.where((train.banner_pos == i))].click.mean()\n",
    "    ctr_avg_list.append(ctr_avg)\n",
    "    print(\" banner 位置: {},  点击率: {}\".format(i,ctr_avg))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "位置0和位置1的点击率分别为16.4%和18.2%，它们的点击率并不是最高。位置7和位置3的点击率分别达到了33%和24%，它们的点击率要比位置1和位置0高很多。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xd3e49b0>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['banner_pos', 'click']).size().unstack().plot(kind='bar', figsize=(12,6), title='banner 位置的广告展现量和点击量的分布')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面我们再看一下banner_pos的点击率的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'banner 位置的点击率的分布')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_banner = train[['banner_pos','click']].groupby(['banner_pos']).count().reset_index()\n",
    "df_banner = df_banner.rename(columns={'click': 'impressions'})\n",
    "df_banner['clicks'] = df_click[['banner_pos','click']].groupby(['banner_pos']).count().reset_index()['click']\n",
    "df_banner['CTR'] = df_banner['clicks']/df_banner['impressions']*100\n",
    "sort_banners = df_banner.sort_values(by='CTR',ascending=False)['banner_pos'].tolist()\n",
    "plt.figure(figsize=(12,6))\n",
    "sns.barplot(y='CTR', x='banner_pos', data=df_banner, order=sort_banners)\n",
    "plt.title('banner 位置的点击率的分布')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可知位置7和位置3的点击率是最高的，但是他们的数据比例并不是最高的，相反位置0和位置1的数据比例，展现量和点击量都是最高的，但是他们的点击率并非最高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## device_type\n",
    "\n",
    "device_type表示设备类型，广告可能会在多种设备上展示，下面我们看一下device_type的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1    0.922380\n",
      "0    0.055076\n",
      "4    0.019286\n",
      "5    0.003257\n",
      "2    0.000001\n",
      "Name: device_type, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print((train.device_type.value_counts()/len(train)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看到一共有4种设备，其中设备1所占比例最大达到了92%， 绝大多数广告都是在设备1上展示的。下面我们看一下展现量和点击量的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xd3286a0>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train[['device_type','click']].groupby(['device_type','click']).size().unstack().plot(kind='bar', title='设备类型')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看到设备1上的广告展现量和点击量都是最大的。其他设备的展现量和点击量相对较少。为此我们要详细分析一下设备1上的点击量的情况，我们按照不同的时间点对设备1的点击量进行一下分析。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xd3a13c8>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_click[df_click['device_type']==1].groupby(['time', 'click'])\\\n",
    "                                     .size().unstack()\\\n",
    "                                     .plot(kind='bar', title=\"设备1的点击量分布\", figsize=(12,6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可知，设备1上的点击量最高点位于下午1点，这和我们之前按时间分析点击量的结果是一致的。\n",
    "\n",
    "下面我们分别统计出所有类型的设备的点击量、展现量和点击率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>device_type</th>\n",
       "      <th>click</th>\n",
       "      <th>impressions</th>\n",
       "      <th>CTR</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>11628</td>\n",
       "      <td>55076</td>\n",
       "      <td>21.112644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>155808</td>\n",
       "      <td>922380</td>\n",
       "      <td>16.891953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4</td>\n",
       "      <td>1878</td>\n",
       "      <td>19286</td>\n",
       "      <td>9.737634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5</td>\n",
       "      <td>321</td>\n",
       "      <td>3257</td>\n",
       "      <td>9.855695</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   device_type   click  impressions        CTR\n",
       "0            0   11628        55076  21.112644\n",
       "1            1  155808       922380  16.891953\n",
       "2            4    1878        19286   9.737634\n",
       "3            5     321         3257   9.855695"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "device_type_click = df_click.groupby('device_type').agg({'click':'sum'}).reset_index()\n",
    "device_type_impression = train.groupby('device_type').agg({'click':'count'}).reset_index().rename(columns={'click': 'impressions'})\n",
    "merged_device_type = pd.merge(left = device_type_click , right = device_type_impression, how = 'inner', on = 'device_type')\n",
    "\n",
    "merged_device_type['CTR'] = merged_device_type['click'] / merged_device_type['impressions']*100\n",
    "\n",
    "merged_device_type"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们看到点击率最高的设备是设备0，并不是设备1.所以说展现量和点击量都较高并不意味着点击率也会较高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### app features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "app_id的唯一值有 3122 个\n",
      "app_domain的唯一值有 197 个\n",
      "app_category的唯一值有 26 个\n"
     ]
    }
   ],
   "source": [
    "print(\"app_id的唯一值有 {} 个\".format(train.app_id.nunique()))\n",
    "print(\"app_domain的唯一值有 {} 个\".format(train.app_domain.nunique()))\n",
    "print(\"app_category的唯一值有 {} 个\".format(train.app_category.nunique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "07d7df22    0.647846\n",
      "0f2161f8    0.236653\n",
      "cef3e649    0.042757\n",
      "8ded1f7a    0.035973\n",
      "f95efa07    0.027883\n",
      "d1327cf5    0.003055\n",
      "dc97ec06    0.001336\n",
      "09481d60    0.001328\n",
      "75d80bbe    0.000947\n",
      "fc6fa53d    0.000564\n",
      "4ce2e9fc    0.000519\n",
      "879c24eb    0.000325\n",
      "a3c42688    0.000291\n",
      "4681bb9d    0.000171\n",
      "0f9a328c    0.000133\n",
      "2281a340    0.000059\n",
      "a86a3e89    0.000057\n",
      "8df2e842    0.000048\n",
      "79f0b860    0.000019\n",
      "0bfbc358    0.000010\n",
      "a7fd01ec    0.000008\n",
      "7113d72a    0.000006\n",
      "18b1e0be    0.000005\n",
      "5326cf99    0.000003\n",
      "2fc4f2aa    0.000003\n",
      "bd41f328    0.000001\n",
      "Name: app_category, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print((train.app_category.value_counts()/len(train)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ae7e160>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train['app_category'].value_counts().plot(kind='bar', title='App Category v/s Clicks',figsize=(12,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xf0abb70>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_app_category = train.groupby(['app_category', 'click']).size().unstack()\n",
    "train_app_category.div(train_app_category.sum(axis=1), axis=0).plot(kind='bar', stacked=True, title=\"Intra-category CTR\",figsize=(12,6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### C14 - C21 features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "C14的唯一值有 2253 个\n",
      "C15的唯一值有 8 个\n",
      "C16的唯一值有 9 个\n",
      "C17的唯一值有 421 个\n",
      "C18的唯一值有 4 个\n",
      "C19的唯一值有 66 个\n",
      "C20的唯一值有 165 个\n"
     ]
    }
   ],
   "source": [
    "print(\"C14的唯一值有 {} 个\".format(train.C14.nunique()))\n",
    "print(\"C15的唯一值有 {} 个\".format(train.C15.nunique()))\n",
    "print(\"C16的唯一值有 {} 个\".format(train.C16.nunique()))\n",
    "print(\"C17的唯一值有 {} 个\".format(train.C17.nunique()))\n",
    "print(\"C18的唯一值有 {} 个\".format(train.C18.nunique()))\n",
    "print(\"C19的唯一值有 {} 个\".format(train.C19.nunique()))\n",
    "print(\"C20的唯一值有 {} 个\".format(train.C20.nunique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1aac31d0>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['C15', 'click']).size().unstack().plot(kind='bar', stacked=True, title='C15 distribution')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1aff49e8>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['C16', 'click']).size().unstack().plot(kind='bar', stacked=True, title='C16 distribution')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1b0723c8>"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['C18', 'click']).size().unstack().plot(kind='bar', stacked=True, title='C18 distribution')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 建模\n",
    "\n",
    "## has简介\n",
    "由于我们的的数据样本量有100万条，特征变量有20个左右，那么总共的特征值将会有100万X20=2000万个左右，为了减少系统内存的消耗，我们要使用python的内置hash函数来映射某些特征变量，我们要将那些类型为object的特征变量映射为一定范围内的整数(原来的string被映射成了integer)，这样就可以大大降低内存的消耗。\n",
    "下面我们看看未使用hash之前我们的样本数据:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>click</th>\n",
       "      <th>hour</th>\n",
       "      <th>C1</th>\n",
       "      <th>banner_pos</th>\n",
       "      <th>site_id</th>\n",
       "      <th>site_domain</th>\n",
       "      <th>site_category</th>\n",
       "      <th>app_id</th>\n",
       "      <th>app_domain</th>\n",
       "      <th>...</th>\n",
       "      <th>C14</th>\n",
       "      <th>C15</th>\n",
       "      <th>C16</th>\n",
       "      <th>C17</th>\n",
       "      <th>C18</th>\n",
       "      <th>C19</th>\n",
       "      <th>C20</th>\n",
       "      <th>C21</th>\n",
       "      <th>time</th>\n",
       "      <th>day_of_week</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1636923355</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>85f751fd</td>\n",
       "      <td>c4e18dd6</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>e2a1ca37</td>\n",
       "      <td>2347f47a</td>\n",
       "      <td>...</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>-1</td>\n",
       "      <td>79</td>\n",
       "      <td>0</td>\n",
       "      <td>Tuesday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-193497663</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>1</td>\n",
       "      <td>e151e245</td>\n",
       "      <td>7e091613</td>\n",
       "      <td>f028772b</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>17747</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1974</td>\n",
       "      <td>2</td>\n",
       "      <td>39</td>\n",
       "      <td>100021</td>\n",
       "      <td>33</td>\n",
       "      <td>0</td>\n",
       "      <td>Tuesday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1315205890</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1002</td>\n",
       "      <td>0</td>\n",
       "      <td>85f751fd</td>\n",
       "      <td>c4e18dd6</td>\n",
       "      <td>50e219e0</td>\n",
       "      <td>a37bf1e4</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>21691</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>2495</td>\n",
       "      <td>2</td>\n",
       "      <td>167</td>\n",
       "      <td>-1</td>\n",
       "      <td>23</td>\n",
       "      <td>0</td>\n",
       "      <td>Tuesday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1336077603</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1fbe01fe</td>\n",
       "      <td>f3845767</td>\n",
       "      <td>28905ebd</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>15701</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>-1</td>\n",
       "      <td>79</td>\n",
       "      <td>0</td>\n",
       "      <td>Tuesday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1368186722</td>\n",
       "      <td>1</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1fbe01fe</td>\n",
       "      <td>f3845767</td>\n",
       "      <td>28905ebd</td>\n",
       "      <td>ecad2386</td>\n",
       "      <td>7801e8d9</td>\n",
       "      <td>...</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>1722</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>100084</td>\n",
       "      <td>79</td>\n",
       "      <td>0</td>\n",
       "      <td>Tuesday</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           id  click       hour    C1  banner_pos   site_id site_domain  \\\n",
       "0 -1636923355      0 2014-10-21  1005           0  85f751fd    c4e18dd6   \n",
       "1  -193497663      0 2014-10-21  1005           1  e151e245    7e091613   \n",
       "2  1315205890      0 2014-10-21  1002           0  85f751fd    c4e18dd6   \n",
       "3  1336077603      0 2014-10-21  1005           0  1fbe01fe    f3845767   \n",
       "4 -1368186722      1 2014-10-21  1005           0  1fbe01fe    f3845767   \n",
       "\n",
       "  site_category    app_id app_domain     ...         C14  C15 C16   C17  C18  \\\n",
       "0      50e219e0  e2a1ca37   2347f47a     ...       15708  320  50  1722    0   \n",
       "1      f028772b  ecad2386   7801e8d9     ...       17747  320  50  1974    2   \n",
       "2      50e219e0  a37bf1e4   7801e8d9     ...       21691  320  50  2495    2   \n",
       "3      28905ebd  ecad2386   7801e8d9     ...       15701  320  50  1722    0   \n",
       "4      28905ebd  ecad2386   7801e8d9     ...       15708  320  50  1722    0   \n",
       "\n",
       "   C19     C20  C21  time  day_of_week  \n",
       "0   35      -1   79     0      Tuesday  \n",
       "1   39  100021   33     0      Tuesday  \n",
       "2  167      -1   23     0      Tuesday  \n",
       "3   35      -1   79     0      Tuesday  \n",
       "4   35  100084   79     0      Tuesday  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面我们要将hash函数将类型为object的变量映射成integer型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>click</th>\n",
       "      <th>hour</th>\n",
       "      <th>C1</th>\n",
       "      <th>banner_pos</th>\n",
       "      <th>device_type</th>\n",
       "      <th>device_conn_type</th>\n",
       "      <th>C14</th>\n",
       "      <th>C15</th>\n",
       "      <th>C16</th>\n",
       "      <th>...</th>\n",
       "      <th>site_id_int</th>\n",
       "      <th>site_domain_int</th>\n",
       "      <th>site_category_int</th>\n",
       "      <th>app_id_int</th>\n",
       "      <th>app_domain_int</th>\n",
       "      <th>app_category_int</th>\n",
       "      <th>device_id_int</th>\n",
       "      <th>device_ip_int</th>\n",
       "      <th>device_model_int</th>\n",
       "      <th>day_of_week_int</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1636923355</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>...</td>\n",
       "      <td>3294295106353209792</td>\n",
       "      <td>-7871480762403810028</td>\n",
       "      <td>-1726633989484689459</td>\n",
       "      <td>3967604608139905137</td>\n",
       "      <td>-387442148922046908</td>\n",
       "      <td>3587892912659238008</td>\n",
       "      <td>-6860200936241454220</td>\n",
       "      <td>-7863861599293986987</td>\n",
       "      <td>8122318252297648011</td>\n",
       "      <td>-6056180354402690469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-193497663</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>17747</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>...</td>\n",
       "      <td>-1088018682312011499</td>\n",
       "      <td>-8030684975096413899</td>\n",
       "      <td>-7766034975137587207</td>\n",
       "      <td>-5153835905196929001</td>\n",
       "      <td>9059885572487474882</td>\n",
       "      <td>5089309385467275041</td>\n",
       "      <td>5788537550175848951</td>\n",
       "      <td>588395654717179763</td>\n",
       "      <td>7072708345363904469</td>\n",
       "      <td>-6056180354402690469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1315205890</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1002</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>21691</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>...</td>\n",
       "      <td>3294295106353209792</td>\n",
       "      <td>-7871480762403810028</td>\n",
       "      <td>-1726633989484689459</td>\n",
       "      <td>5064714988463203132</td>\n",
       "      <td>9059885572487474882</td>\n",
       "      <td>5089309385467275041</td>\n",
       "      <td>-8229604351924704167</td>\n",
       "      <td>8009012252837729359</td>\n",
       "      <td>-6538374976293708962</td>\n",
       "      <td>-6056180354402690469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1336077603</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15701</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>...</td>\n",
       "      <td>4322696643391637070</td>\n",
       "      <td>-3123241050271775153</td>\n",
       "      <td>7354276305300575896</td>\n",
       "      <td>-5153835905196929001</td>\n",
       "      <td>9059885572487474882</td>\n",
       "      <td>5089309385467275041</td>\n",
       "      <td>5788537550175848951</td>\n",
       "      <td>-5845137796421209069</td>\n",
       "      <td>-3805608367665034636</td>\n",
       "      <td>-6056180354402690469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1368186722</td>\n",
       "      <td>1</td>\n",
       "      <td>2014-10-21</td>\n",
       "      <td>1005</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>15708</td>\n",
       "      <td>320</td>\n",
       "      <td>50</td>\n",
       "      <td>...</td>\n",
       "      <td>4322696643391637070</td>\n",
       "      <td>-3123241050271775153</td>\n",
       "      <td>7354276305300575896</td>\n",
       "      <td>-5153835905196929001</td>\n",
       "      <td>9059885572487474882</td>\n",
       "      <td>5089309385467275041</td>\n",
       "      <td>5788537550175848951</td>\n",
       "      <td>8085682286269281170</td>\n",
       "      <td>7088212619388353806</td>\n",
       "      <td>-6056180354402690469</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           id  click       hour    C1  banner_pos  device_type  \\\n",
       "0 -1636923355      0 2014-10-21  1005           0            1   \n",
       "1  -193497663      0 2014-10-21  1005           1            1   \n",
       "2  1315205890      0 2014-10-21  1002           0            0   \n",
       "3  1336077603      0 2014-10-21  1005           0            1   \n",
       "4 -1368186722      1 2014-10-21  1005           0            1   \n",
       "\n",
       "   device_conn_type    C14  C15  C16         ...           \\\n",
       "0                 0  15708  320   50         ...            \n",
       "1                 0  17747  320   50         ...            \n",
       "2                 0  21691  320   50         ...            \n",
       "3                 0  15701  320   50         ...            \n",
       "4                 0  15708  320   50         ...            \n",
       "\n",
       "           site_id_int      site_domain_int    site_category_int  \\\n",
       "0  3294295106353209792 -7871480762403810028 -1726633989484689459   \n",
       "1 -1088018682312011499 -8030684975096413899 -7766034975137587207   \n",
       "2  3294295106353209792 -7871480762403810028 -1726633989484689459   \n",
       "3  4322696643391637070 -3123241050271775153  7354276305300575896   \n",
       "4  4322696643391637070 -3123241050271775153  7354276305300575896   \n",
       "\n",
       "            app_id_int       app_domain_int     app_category_int  \\\n",
       "0  3967604608139905137  -387442148922046908  3587892912659238008   \n",
       "1 -5153835905196929001  9059885572487474882  5089309385467275041   \n",
       "2  5064714988463203132  9059885572487474882  5089309385467275041   \n",
       "3 -5153835905196929001  9059885572487474882  5089309385467275041   \n",
       "4 -5153835905196929001  9059885572487474882  5089309385467275041   \n",
       "\n",
       "         device_id_int        device_ip_int     device_model_int  \\\n",
       "0 -6860200936241454220 -7863861599293986987  8122318252297648011   \n",
       "1  5788537550175848951   588395654717179763  7072708345363904469   \n",
       "2 -8229604351924704167  8009012252837729359 -6538374976293708962   \n",
       "3  5788537550175848951 -5845137796421209069 -3805608367665034636   \n",
       "4  5788537550175848951  8085682286269281170  7088212619388353806   \n",
       "\n",
       "       day_of_week_int  \n",
       "0 -6056180354402690469  \n",
       "1 -6056180354402690469  \n",
       "2 -6056180354402690469  \n",
       "3 -6056180354402690469  \n",
       "4 -6056180354402690469  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def convert_obj_to_int(self):\n",
    "    \n",
    "    object_list_columns = self.columns\n",
    "    object_list_dtypes = self.dtypes\n",
    "    new_col_suffix = '_int'\n",
    "    for index in range(0,len(object_list_columns)):\n",
    "        if object_list_dtypes[index] == object :\n",
    "            self[object_list_columns[index]+new_col_suffix] = self[object_list_columns[index]].map( lambda  x: hash(x))\n",
    "            self.drop([object_list_columns[index]],inplace=True,axis=1)\n",
    "    return self\n",
    "train = convert_obj_to_int(train)\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LightGBM 模型 \n",
    "\n",
    "<a href=\"https://lightgbm.readthedocs.io/en/latest/\">LightGBM</a>是个快速的，分布式的，高性能的基于决策树算法的梯度提升框架。可用于排序，分类，回归以及很多其他的机器学习任务中,接下来我们要使用LightGBM作为我们的分类模型."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "train.drop('hour', axis=1, inplace=True)\n",
    "train.drop('id', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = train.loc[:, train.columns != 'click']\n",
    "y_target = train.click.values\n",
    "\n",
    "msk = np.random.rand(len(X_train)) < 0.8\n",
    "lgb_train = lgb.Dataset(X_train[msk], y_target[msk])\n",
    "lgb_eval = lgb.Dataset(X_train[~msk], y_target[~msk], reference=lgb_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练...\n",
      "[1]\tvalid_0's binary_logloss: 0.448408\n",
      "Training until validation scores don't improve for 500 rounds.\n",
      "[2]\tvalid_0's binary_logloss: 0.444125\n",
      "[3]\tvalid_0's binary_logloss: 0.440432\n",
      "[4]\tvalid_0's binary_logloss: 0.437069\n",
      "[5]\tvalid_0's binary_logloss: 0.434273\n",
      "[6]\tvalid_0's binary_logloss: 0.431874\n",
      "[7]\tvalid_0's binary_logloss: 0.429536\n",
      "[8]\tvalid_0's binary_logloss: 0.427666\n",
      "[9]\tvalid_0's binary_logloss: 0.426059\n",
      "[10]\tvalid_0's binary_logloss: 0.424549\n",
      "[11]\tvalid_0's binary_logloss: 0.423223\n",
      "[12]\tvalid_0's binary_logloss: 0.422081\n",
      "[13]\tvalid_0's binary_logloss: 0.420984\n",
      "[14]\tvalid_0's binary_logloss: 0.420014\n",
      "[15]\tvalid_0's binary_logloss: 0.419035\n",
      "[16]\tvalid_0's binary_logloss: 0.418202\n",
      "[17]\tvalid_0's binary_logloss: 0.417401\n",
      "[18]\tvalid_0's binary_logloss: 0.416707\n",
      "[19]\tvalid_0's binary_logloss: 0.416105\n",
      "[20]\tvalid_0's binary_logloss: 0.415556\n",
      "[21]\tvalid_0's binary_logloss: 0.414978\n",
      "[22]\tvalid_0's binary_logloss: 0.414532\n",
      "[23]\tvalid_0's binary_logloss: 0.414154\n",
      "[24]\tvalid_0's binary_logloss: 0.413748\n",
      "[25]\tvalid_0's binary_logloss: 0.413313\n",
      "[26]\tvalid_0's binary_logloss: 0.412819\n",
      "[27]\tvalid_0's binary_logloss: 0.412523\n",
      "[28]\tvalid_0's binary_logloss: 0.412208\n",
      "[29]\tvalid_0's binary_logloss: 0.411876\n",
      "[30]\tvalid_0's binary_logloss: 0.41158\n",
      "[31]\tvalid_0's binary_logloss: 0.411332\n",
      "[32]\tvalid_0's binary_logloss: 0.41108\n",
      "[33]\tvalid_0's binary_logloss: 0.410797\n",
      "[34]\tvalid_0's binary_logloss: 0.410582\n",
      "[35]\tvalid_0's binary_logloss: 0.410326\n",
      "[36]\tvalid_0's binary_logloss: 0.410076\n",
      "[37]\tvalid_0's binary_logloss: 0.409782\n",
      "[38]\tvalid_0's binary_logloss: 0.409591\n",
      "[39]\tvalid_0's binary_logloss: 0.409389\n",
      "[40]\tvalid_0's binary_logloss: 0.409214\n",
      "[41]\tvalid_0's binary_logloss: 0.409087\n",
      "[42]\tvalid_0's binary_logloss: 0.408875\n",
      "[43]\tvalid_0's binary_logloss: 0.408695\n",
      "[44]\tvalid_0's binary_logloss: 0.408544\n",
      "[45]\tvalid_0's binary_logloss: 0.408372\n",
      "[46]\tvalid_0's binary_logloss: 0.408143\n",
      "[47]\tvalid_0's binary_logloss: 0.408052\n",
      "[48]\tvalid_0's binary_logloss: 0.407944\n",
      "[49]\tvalid_0's binary_logloss: 0.407811\n",
      "[50]\tvalid_0's binary_logloss: 0.407675\n",
      "[51]\tvalid_0's binary_logloss: 0.407503\n",
      "[52]\tvalid_0's binary_logloss: 0.40729\n",
      "[53]\tvalid_0's binary_logloss: 0.407154\n",
      "[54]\tvalid_0's binary_logloss: 0.407029\n",
      "[55]\tvalid_0's binary_logloss: 0.406929\n",
      "[56]\tvalid_0's binary_logloss: 0.406796\n",
      "[57]\tvalid_0's binary_logloss: 0.406662\n",
      "[58]\tvalid_0's binary_logloss: 0.40663\n",
      "[59]\tvalid_0's binary_logloss: 0.406464\n",
      "[60]\tvalid_0's binary_logloss: 0.406347\n",
      "[61]\tvalid_0's binary_logloss: 0.406287\n",
      "[62]\tvalid_0's binary_logloss: 0.406233\n",
      "[63]\tvalid_0's binary_logloss: 0.406154\n",
      "[64]\tvalid_0's binary_logloss: 0.406007\n",
      "[65]\tvalid_0's binary_logloss: 0.405914\n",
      "[66]\tvalid_0's binary_logloss: 0.405831\n",
      "[67]\tvalid_0's binary_logloss: 0.405754\n",
      "[68]\tvalid_0's binary_logloss: 0.405688\n",
      "[69]\tvalid_0's binary_logloss: 0.405645\n",
      "[70]\tvalid_0's binary_logloss: 0.405567\n",
      "[71]\tvalid_0's binary_logloss: 0.405448\n",
      "[72]\tvalid_0's binary_logloss: 0.405379\n",
      "[73]\tvalid_0's binary_logloss: 0.405272\n",
      "[74]\tvalid_0's binary_logloss: 0.405226\n",
      "[75]\tvalid_0's binary_logloss: 0.405185\n",
      "[76]\tvalid_0's binary_logloss: 0.405085\n",
      "[77]\tvalid_0's binary_logloss: 0.405022\n",
      "[78]\tvalid_0's binary_logloss: 0.404936\n",
      "[79]\tvalid_0's binary_logloss: 0.404886\n",
      "[80]\tvalid_0's binary_logloss: 0.404862\n",
      "[81]\tvalid_0's binary_logloss: 0.404814\n",
      "[82]\tvalid_0's binary_logloss: 0.404761\n",
      "[83]\tvalid_0's binary_logloss: 0.404703\n",
      "[84]\tvalid_0's binary_logloss: 0.404646\n",
      "[85]\tvalid_0's binary_logloss: 0.404612\n",
      "[86]\tvalid_0's binary_logloss: 0.404498\n",
      "[87]\tvalid_0's binary_logloss: 0.404432\n",
      "[88]\tvalid_0's binary_logloss: 0.404359\n",
      "[89]\tvalid_0's binary_logloss: 0.404282\n",
      "[90]\tvalid_0's binary_logloss: 0.404239\n",
      "[91]\tvalid_0's binary_logloss: 0.404184\n",
      "[92]\tvalid_0's binary_logloss: 0.404149\n",
      "[93]\tvalid_0's binary_logloss: 0.404099\n",
      "[94]\tvalid_0's binary_logloss: 0.404093\n",
      "[95]\tvalid_0's binary_logloss: 0.404057\n",
      "[96]\tvalid_0's binary_logloss: 0.404024\n",
      "[97]\tvalid_0's binary_logloss: 0.403958\n",
      "[98]\tvalid_0's binary_logloss: 0.403943\n",
      "[99]\tvalid_0's binary_logloss: 0.403918\n",
      "[100]\tvalid_0's binary_logloss: 0.403917\n",
      "[101]\tvalid_0's binary_logloss: 0.403856\n",
      "[102]\tvalid_0's binary_logloss: 0.403835\n",
      "[103]\tvalid_0's binary_logloss: 0.403773\n",
      "[104]\tvalid_0's binary_logloss: 0.403742\n",
      "[105]\tvalid_0's binary_logloss: 0.403706\n",
      "[106]\tvalid_0's binary_logloss: 0.403683\n",
      "[107]\tvalid_0's binary_logloss: 0.403656\n",
      "[108]\tvalid_0's binary_logloss: 0.403606\n",
      "[109]\tvalid_0's binary_logloss: 0.403565\n",
      "[110]\tvalid_0's binary_logloss: 0.403531\n",
      "[111]\tvalid_0's binary_logloss: 0.403492\n",
      "[112]\tvalid_0's binary_logloss: 0.403453\n",
      "[113]\tvalid_0's binary_logloss: 0.403424\n",
      "[114]\tvalid_0's binary_logloss: 0.403385\n",
      "[115]\tvalid_0's binary_logloss: 0.403342\n",
      "[116]\tvalid_0's binary_logloss: 0.403292\n",
      "[117]\tvalid_0's binary_logloss: 0.403246\n",
      "[118]\tvalid_0's binary_logloss: 0.403216\n",
      "[119]\tvalid_0's binary_logloss: 0.403195\n",
      "[120]\tvalid_0's binary_logloss: 0.403154\n",
      "[121]\tvalid_0's binary_logloss: 0.403111\n",
      "[122]\tvalid_0's binary_logloss: 0.403079\n",
      "[123]\tvalid_0's binary_logloss: 0.403057\n",
      "[124]\tvalid_0's binary_logloss: 0.403024\n",
      "[125]\tvalid_0's binary_logloss: 0.402983\n",
      "[126]\tvalid_0's binary_logloss: 0.402942\n",
      "[127]\tvalid_0's binary_logloss: 0.402906\n",
      "[128]\tvalid_0's binary_logloss: 0.402891\n",
      "[129]\tvalid_0's binary_logloss: 0.402866\n",
      "[130]\tvalid_0's binary_logloss: 0.402841\n",
      "[131]\tvalid_0's binary_logloss: 0.402794\n",
      "[132]\tvalid_0's binary_logloss: 0.402766\n",
      "[133]\tvalid_0's binary_logloss: 0.402736\n",
      "[134]\tvalid_0's binary_logloss: 0.402719\n",
      "[135]\tvalid_0's binary_logloss: 0.402699\n",
      "[136]\tvalid_0's binary_logloss: 0.402665\n",
      "[137]\tvalid_0's binary_logloss: 0.40265\n",
      "[138]\tvalid_0's binary_logloss: 0.402634\n",
      "[139]\tvalid_0's binary_logloss: 0.402608\n",
      "[140]\tvalid_0's binary_logloss: 0.402595\n",
      "[141]\tvalid_0's binary_logloss: 0.402549\n",
      "[142]\tvalid_0's binary_logloss: 0.402528\n",
      "[143]\tvalid_0's binary_logloss: 0.402508\n",
      "[144]\tvalid_0's binary_logloss: 0.402472\n",
      "[145]\tvalid_0's binary_logloss: 0.402448\n",
      "[146]\tvalid_0's binary_logloss: 0.402432\n",
      "[147]\tvalid_0's binary_logloss: 0.402396\n",
      "[148]\tvalid_0's binary_logloss: 0.402361\n",
      "[149]\tvalid_0's binary_logloss: 0.402335\n",
      "[150]\tvalid_0's binary_logloss: 0.402324\n",
      "[151]\tvalid_0's binary_logloss: 0.402321\n",
      "[152]\tvalid_0's binary_logloss: 0.40228\n",
      "[153]\tvalid_0's binary_logloss: 0.402251\n",
      "[154]\tvalid_0's binary_logloss: 0.402232\n",
      "[155]\tvalid_0's binary_logloss: 0.402221\n",
      "[156]\tvalid_0's binary_logloss: 0.402225\n",
      "[157]\tvalid_0's binary_logloss: 0.402211\n",
      "[158]\tvalid_0's binary_logloss: 0.40217\n",
      "[159]\tvalid_0's binary_logloss: 0.40216\n",
      "[160]\tvalid_0's binary_logloss: 0.402166\n",
      "[161]\tvalid_0's binary_logloss: 0.402155\n",
      "[162]\tvalid_0's binary_logloss: 0.402144\n",
      "[163]\tvalid_0's binary_logloss: 0.402112\n",
      "[164]\tvalid_0's binary_logloss: 0.402083\n",
      "[165]\tvalid_0's binary_logloss: 0.402072\n",
      "[166]\tvalid_0's binary_logloss: 0.402067\n",
      "[167]\tvalid_0's binary_logloss: 0.402039\n",
      "[168]\tvalid_0's binary_logloss: 0.402002\n",
      "[169]\tvalid_0's binary_logloss: 0.40199\n",
      "[170]\tvalid_0's binary_logloss: 0.401963\n",
      "[171]\tvalid_0's binary_logloss: 0.40194\n",
      "[172]\tvalid_0's binary_logloss: 0.40192\n",
      "[173]\tvalid_0's binary_logloss: 0.401903\n",
      "[174]\tvalid_0's binary_logloss: 0.401901\n",
      "[175]\tvalid_0's binary_logloss: 0.401873\n",
      "[176]\tvalid_0's binary_logloss: 0.401832\n",
      "[177]\tvalid_0's binary_logloss: 0.401813\n",
      "[178]\tvalid_0's binary_logloss: 0.401782\n",
      "[179]\tvalid_0's binary_logloss: 0.401741\n",
      "[180]\tvalid_0's binary_logloss: 0.401722\n",
      "[181]\tvalid_0's binary_logloss: 0.401716\n",
      "[182]\tvalid_0's binary_logloss: 0.401698\n",
      "[183]\tvalid_0's binary_logloss: 0.40171\n",
      "[184]\tvalid_0's binary_logloss: 0.401712\n",
      "[185]\tvalid_0's binary_logloss: 0.401708\n",
      "[186]\tvalid_0's binary_logloss: 0.401681\n",
      "[187]\tvalid_0's binary_logloss: 0.401682\n",
      "[188]\tvalid_0's binary_logloss: 0.401678\n",
      "[189]\tvalid_0's binary_logloss: 0.401685\n",
      "[190]\tvalid_0's binary_logloss: 0.401663\n",
      "[191]\tvalid_0's binary_logloss: 0.401671\n",
      "[192]\tvalid_0's binary_logloss: 0.401662\n",
      "[193]\tvalid_0's binary_logloss: 0.401637\n",
      "[194]\tvalid_0's binary_logloss: 0.401644\n",
      "[195]\tvalid_0's binary_logloss: 0.401661\n",
      "[196]\tvalid_0's binary_logloss: 0.401661\n",
      "[197]\tvalid_0's binary_logloss: 0.401657\n",
      "[198]\tvalid_0's binary_logloss: 0.401654\n",
      "[199]\tvalid_0's binary_logloss: 0.401609\n",
      "[200]\tvalid_0's binary_logloss: 0.401596\n",
      "[201]\tvalid_0's binary_logloss: 0.40157\n",
      "[202]\tvalid_0's binary_logloss: 0.401561\n",
      "[203]\tvalid_0's binary_logloss: 0.401548\n",
      "[204]\tvalid_0's binary_logloss: 0.401547\n",
      "[205]\tvalid_0's binary_logloss: 0.401536\n",
      "[206]\tvalid_0's binary_logloss: 0.401518\n",
      "[207]\tvalid_0's binary_logloss: 0.401496\n",
      "[208]\tvalid_0's binary_logloss: 0.40147\n",
      "[209]\tvalid_0's binary_logloss: 0.40146\n",
      "[210]\tvalid_0's binary_logloss: 0.401459\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[211]\tvalid_0's binary_logloss: 0.401444\n",
      "[212]\tvalid_0's binary_logloss: 0.401421\n",
      "[213]\tvalid_0's binary_logloss: 0.40139\n",
      "[214]\tvalid_0's binary_logloss: 0.401369\n",
      "[215]\tvalid_0's binary_logloss: 0.40134\n",
      "[216]\tvalid_0's binary_logloss: 0.401326\n",
      "[217]\tvalid_0's binary_logloss: 0.401297\n",
      "[218]\tvalid_0's binary_logloss: 0.401269\n",
      "[219]\tvalid_0's binary_logloss: 0.401262\n",
      "[220]\tvalid_0's binary_logloss: 0.401248\n",
      "[221]\tvalid_0's binary_logloss: 0.401244\n",
      "[222]\tvalid_0's binary_logloss: 0.401197\n",
      "[223]\tvalid_0's binary_logloss: 0.401158\n",
      "[224]\tvalid_0's binary_logloss: 0.401161\n",
      "[225]\tvalid_0's binary_logloss: 0.401165\n",
      "[226]\tvalid_0's binary_logloss: 0.401155\n",
      "[227]\tvalid_0's binary_logloss: 0.401115\n",
      "[228]\tvalid_0's binary_logloss: 0.401108\n",
      "[229]\tvalid_0's binary_logloss: 0.401084\n",
      "[230]\tvalid_0's binary_logloss: 0.401072\n",
      "[231]\tvalid_0's binary_logloss: 0.401057\n",
      "[232]\tvalid_0's binary_logloss: 0.401036\n",
      "[233]\tvalid_0's binary_logloss: 0.401023\n",
      "[234]\tvalid_0's binary_logloss: 0.401003\n",
      "[235]\tvalid_0's binary_logloss: 0.400999\n",
      "[236]\tvalid_0's binary_logloss: 0.40098\n",
      "[237]\tvalid_0's binary_logloss: 0.400979\n",
      "[238]\tvalid_0's binary_logloss: 0.400955\n",
      "[239]\tvalid_0's binary_logloss: 0.400947\n",
      "[240]\tvalid_0's binary_logloss: 0.400923\n",
      "[241]\tvalid_0's binary_logloss: 0.400917\n",
      "[242]\tvalid_0's binary_logloss: 0.400911\n",
      "[243]\tvalid_0's binary_logloss: 0.400907\n",
      "[244]\tvalid_0's binary_logloss: 0.400906\n",
      "[245]\tvalid_0's binary_logloss: 0.400915\n",
      "[246]\tvalid_0's binary_logloss: 0.400885\n",
      "[247]\tvalid_0's binary_logloss: 0.400871\n",
      "[248]\tvalid_0's binary_logloss: 0.40087\n",
      "[249]\tvalid_0's binary_logloss: 0.400867\n",
      "[250]\tvalid_0's binary_logloss: 0.400862\n",
      "[251]\tvalid_0's binary_logloss: 0.400853\n",
      "[252]\tvalid_0's binary_logloss: 0.400838\n",
      "[253]\tvalid_0's binary_logloss: 0.40084\n",
      "[254]\tvalid_0's binary_logloss: 0.40084\n",
      "[255]\tvalid_0's binary_logloss: 0.400828\n",
      "[256]\tvalid_0's binary_logloss: 0.400806\n",
      "[257]\tvalid_0's binary_logloss: 0.400787\n",
      "[258]\tvalid_0's binary_logloss: 0.400767\n",
      "[259]\tvalid_0's binary_logloss: 0.400748\n",
      "[260]\tvalid_0's binary_logloss: 0.400721\n",
      "[261]\tvalid_0's binary_logloss: 0.400708\n",
      "[262]\tvalid_0's binary_logloss: 0.400706\n",
      "[263]\tvalid_0's binary_logloss: 0.400708\n",
      "[264]\tvalid_0's binary_logloss: 0.400706\n",
      "[265]\tvalid_0's binary_logloss: 0.400711\n",
      "[266]\tvalid_0's binary_logloss: 0.400712\n",
      "[267]\tvalid_0's binary_logloss: 0.400704\n",
      "[268]\tvalid_0's binary_logloss: 0.4007\n",
      "[269]\tvalid_0's binary_logloss: 0.400671\n",
      "[270]\tvalid_0's binary_logloss: 0.400668\n",
      "[271]\tvalid_0's binary_logloss: 0.40065\n",
      "[272]\tvalid_0's binary_logloss: 0.400624\n",
      "[273]\tvalid_0's binary_logloss: 0.400602\n",
      "[274]\tvalid_0's binary_logloss: 0.400588\n",
      "[275]\tvalid_0's binary_logloss: 0.400578\n",
      "[276]\tvalid_0's binary_logloss: 0.400555\n",
      "[277]\tvalid_0's binary_logloss: 0.400544\n",
      "[278]\tvalid_0's binary_logloss: 0.400547\n",
      "[279]\tvalid_0's binary_logloss: 0.400548\n",
      "[280]\tvalid_0's binary_logloss: 0.400546\n",
      "[281]\tvalid_0's binary_logloss: 0.400516\n",
      "[282]\tvalid_0's binary_logloss: 0.4005\n",
      "[283]\tvalid_0's binary_logloss: 0.400481\n",
      "[284]\tvalid_0's binary_logloss: 0.400461\n",
      "[285]\tvalid_0's binary_logloss: 0.400466\n",
      "[286]\tvalid_0's binary_logloss: 0.400443\n",
      "[287]\tvalid_0's binary_logloss: 0.400426\n",
      "[288]\tvalid_0's binary_logloss: 0.400401\n",
      "[289]\tvalid_0's binary_logloss: 0.400394\n",
      "[290]\tvalid_0's binary_logloss: 0.400388\n",
      "[291]\tvalid_0's binary_logloss: 0.400384\n",
      "[292]\tvalid_0's binary_logloss: 0.400375\n",
      "[293]\tvalid_0's binary_logloss: 0.400379\n",
      "[294]\tvalid_0's binary_logloss: 0.400356\n",
      "[295]\tvalid_0's binary_logloss: 0.400328\n",
      "[296]\tvalid_0's binary_logloss: 0.400312\n",
      "[297]\tvalid_0's binary_logloss: 0.400293\n",
      "[298]\tvalid_0's binary_logloss: 0.400257\n",
      "[299]\tvalid_0's binary_logloss: 0.400253\n",
      "[300]\tvalid_0's binary_logloss: 0.400254\n",
      "[301]\tvalid_0's binary_logloss: 0.400243\n",
      "[302]\tvalid_0's binary_logloss: 0.400243\n",
      "[303]\tvalid_0's binary_logloss: 0.400233\n",
      "[304]\tvalid_0's binary_logloss: 0.400229\n",
      "[305]\tvalid_0's binary_logloss: 0.400225\n",
      "[306]\tvalid_0's binary_logloss: 0.400219\n",
      "[307]\tvalid_0's binary_logloss: 0.400195\n",
      "[308]\tvalid_0's binary_logloss: 0.400179\n",
      "[309]\tvalid_0's binary_logloss: 0.400159\n",
      "[310]\tvalid_0's binary_logloss: 0.400168\n",
      "[311]\tvalid_0's binary_logloss: 0.400156\n",
      "[312]\tvalid_0's binary_logloss: 0.400155\n",
      "[313]\tvalid_0's binary_logloss: 0.400151\n",
      "[314]\tvalid_0's binary_logloss: 0.400152\n",
      "[315]\tvalid_0's binary_logloss: 0.400152\n",
      "[316]\tvalid_0's binary_logloss: 0.400138\n",
      "[317]\tvalid_0's binary_logloss: 0.400128\n",
      "[318]\tvalid_0's binary_logloss: 0.400102\n",
      "[319]\tvalid_0's binary_logloss: 0.400096\n",
      "[320]\tvalid_0's binary_logloss: 0.40009\n",
      "[321]\tvalid_0's binary_logloss: 0.400085\n",
      "[322]\tvalid_0's binary_logloss: 0.400072\n",
      "[323]\tvalid_0's binary_logloss: 0.400053\n",
      "[324]\tvalid_0's binary_logloss: 0.400049\n",
      "[325]\tvalid_0's binary_logloss: 0.400037\n",
      "[326]\tvalid_0's binary_logloss: 0.400013\n",
      "[327]\tvalid_0's binary_logloss: 0.400012\n",
      "[328]\tvalid_0's binary_logloss: 0.400009\n",
      "[329]\tvalid_0's binary_logloss: 0.400004\n",
      "[330]\tvalid_0's binary_logloss: 0.400001\n",
      "[331]\tvalid_0's binary_logloss: 0.399997\n",
      "[332]\tvalid_0's binary_logloss: 0.399978\n",
      "[333]\tvalid_0's binary_logloss: 0.399971\n",
      "[334]\tvalid_0's binary_logloss: 0.399958\n",
      "[335]\tvalid_0's binary_logloss: 0.399952\n",
      "[336]\tvalid_0's binary_logloss: 0.399949\n",
      "[337]\tvalid_0's binary_logloss: 0.399945\n",
      "[338]\tvalid_0's binary_logloss: 0.399939\n",
      "[339]\tvalid_0's binary_logloss: 0.39994\n",
      "[340]\tvalid_0's binary_logloss: 0.399937\n",
      "[341]\tvalid_0's binary_logloss: 0.39993\n",
      "[342]\tvalid_0's binary_logloss: 0.399933\n",
      "[343]\tvalid_0's binary_logloss: 0.399937\n",
      "[344]\tvalid_0's binary_logloss: 0.399937\n",
      "[345]\tvalid_0's binary_logloss: 0.399937\n",
      "[346]\tvalid_0's binary_logloss: 0.399919\n",
      "[347]\tvalid_0's binary_logloss: 0.39992\n",
      "[348]\tvalid_0's binary_logloss: 0.399917\n",
      "[349]\tvalid_0's binary_logloss: 0.399919\n",
      "[350]\tvalid_0's binary_logloss: 0.399928\n",
      "[351]\tvalid_0's binary_logloss: 0.399925\n",
      "[352]\tvalid_0's binary_logloss: 0.399916\n",
      "[353]\tvalid_0's binary_logloss: 0.399904\n",
      "[354]\tvalid_0's binary_logloss: 0.399911\n",
      "[355]\tvalid_0's binary_logloss: 0.39992\n",
      "[356]\tvalid_0's binary_logloss: 0.399933\n",
      "[357]\tvalid_0's binary_logloss: 0.399929\n",
      "[358]\tvalid_0's binary_logloss: 0.399924\n",
      "[359]\tvalid_0's binary_logloss: 0.399925\n",
      "[360]\tvalid_0's binary_logloss: 0.399931\n",
      "[361]\tvalid_0's binary_logloss: 0.399913\n",
      "[362]\tvalid_0's binary_logloss: 0.399904\n",
      "[363]\tvalid_0's binary_logloss: 0.399892\n",
      "[364]\tvalid_0's binary_logloss: 0.3999\n",
      "[365]\tvalid_0's binary_logloss: 0.399895\n",
      "[366]\tvalid_0's binary_logloss: 0.399887\n",
      "[367]\tvalid_0's binary_logloss: 0.399884\n",
      "[368]\tvalid_0's binary_logloss: 0.399879\n",
      "[369]\tvalid_0's binary_logloss: 0.399877\n",
      "[370]\tvalid_0's binary_logloss: 0.39988\n",
      "[371]\tvalid_0's binary_logloss: 0.399875\n",
      "[372]\tvalid_0's binary_logloss: 0.399853\n",
      "[373]\tvalid_0's binary_logloss: 0.399841\n",
      "[374]\tvalid_0's binary_logloss: 0.399827\n",
      "[375]\tvalid_0's binary_logloss: 0.399826\n",
      "[376]\tvalid_0's binary_logloss: 0.399817\n",
      "[377]\tvalid_0's binary_logloss: 0.399797\n",
      "[378]\tvalid_0's binary_logloss: 0.3998\n",
      "[379]\tvalid_0's binary_logloss: 0.399805\n",
      "[380]\tvalid_0's binary_logloss: 0.399788\n",
      "[381]\tvalid_0's binary_logloss: 0.399787\n",
      "[382]\tvalid_0's binary_logloss: 0.39979\n",
      "[383]\tvalid_0's binary_logloss: 0.399788\n",
      "[384]\tvalid_0's binary_logloss: 0.399786\n",
      "[385]\tvalid_0's binary_logloss: 0.399786\n",
      "[386]\tvalid_0's binary_logloss: 0.399788\n",
      "[387]\tvalid_0's binary_logloss: 0.399774\n",
      "[388]\tvalid_0's binary_logloss: 0.399775\n",
      "[389]\tvalid_0's binary_logloss: 0.399776\n",
      "[390]\tvalid_0's binary_logloss: 0.399781\n",
      "[391]\tvalid_0's binary_logloss: 0.399779\n",
      "[392]\tvalid_0's binary_logloss: 0.399766\n",
      "[393]\tvalid_0's binary_logloss: 0.399762\n",
      "[394]\tvalid_0's binary_logloss: 0.399757\n",
      "[395]\tvalid_0's binary_logloss: 0.399769\n",
      "[396]\tvalid_0's binary_logloss: 0.399762\n",
      "[397]\tvalid_0's binary_logloss: 0.399753\n",
      "[398]\tvalid_0's binary_logloss: 0.399748\n",
      "[399]\tvalid_0's binary_logloss: 0.399742\n",
      "[400]\tvalid_0's binary_logloss: 0.39973\n",
      "[401]\tvalid_0's binary_logloss: 0.399726\n",
      "[402]\tvalid_0's binary_logloss: 0.39972\n",
      "[403]\tvalid_0's binary_logloss: 0.399705\n",
      "[404]\tvalid_0's binary_logloss: 0.399686\n",
      "[405]\tvalid_0's binary_logloss: 0.399679\n",
      "[406]\tvalid_0's binary_logloss: 0.399671\n",
      "[407]\tvalid_0's binary_logloss: 0.399662\n",
      "[408]\tvalid_0's binary_logloss: 0.399655\n",
      "[409]\tvalid_0's binary_logloss: 0.399649\n",
      "[410]\tvalid_0's binary_logloss: 0.399641\n",
      "[411]\tvalid_0's binary_logloss: 0.399641\n",
      "[412]\tvalid_0's binary_logloss: 0.399636\n",
      "[413]\tvalid_0's binary_logloss: 0.399644\n",
      "[414]\tvalid_0's binary_logloss: 0.399641\n",
      "[415]\tvalid_0's binary_logloss: 0.399641\n",
      "[416]\tvalid_0's binary_logloss: 0.399628\n",
      "[417]\tvalid_0's binary_logloss: 0.399625\n",
      "[418]\tvalid_0's binary_logloss: 0.399627\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[419]\tvalid_0's binary_logloss: 0.399635\n",
      "[420]\tvalid_0's binary_logloss: 0.399623\n",
      "[421]\tvalid_0's binary_logloss: 0.399611\n",
      "[422]\tvalid_0's binary_logloss: 0.399615\n",
      "[423]\tvalid_0's binary_logloss: 0.399613\n",
      "[424]\tvalid_0's binary_logloss: 0.399608\n",
      "[425]\tvalid_0's binary_logloss: 0.399591\n",
      "[426]\tvalid_0's binary_logloss: 0.399596\n",
      "[427]\tvalid_0's binary_logloss: 0.399601\n",
      "[428]\tvalid_0's binary_logloss: 0.399602\n",
      "[429]\tvalid_0's binary_logloss: 0.399592\n",
      "[430]\tvalid_0's binary_logloss: 0.399601\n",
      "[431]\tvalid_0's binary_logloss: 0.399606\n",
      "[432]\tvalid_0's binary_logloss: 0.399603\n",
      "[433]\tvalid_0's binary_logloss: 0.399603\n",
      "[434]\tvalid_0's binary_logloss: 0.399614\n",
      "[435]\tvalid_0's binary_logloss: 0.39961\n",
      "[436]\tvalid_0's binary_logloss: 0.39961\n",
      "[437]\tvalid_0's binary_logloss: 0.399587\n",
      "[438]\tvalid_0's binary_logloss: 0.399596\n",
      "[439]\tvalid_0's binary_logloss: 0.39959\n",
      "[440]\tvalid_0's binary_logloss: 0.399591\n",
      "[441]\tvalid_0's binary_logloss: 0.399589\n",
      "[442]\tvalid_0's binary_logloss: 0.399577\n",
      "[443]\tvalid_0's binary_logloss: 0.399574\n",
      "[444]\tvalid_0's binary_logloss: 0.39958\n",
      "[445]\tvalid_0's binary_logloss: 0.399568\n",
      "[446]\tvalid_0's binary_logloss: 0.399569\n",
      "[447]\tvalid_0's binary_logloss: 0.399556\n",
      "[448]\tvalid_0's binary_logloss: 0.399552\n",
      "[449]\tvalid_0's binary_logloss: 0.399554\n",
      "[450]\tvalid_0's binary_logloss: 0.399545\n",
      "[451]\tvalid_0's binary_logloss: 0.39953\n",
      "[452]\tvalid_0's binary_logloss: 0.399522\n",
      "[453]\tvalid_0's binary_logloss: 0.399512\n",
      "[454]\tvalid_0's binary_logloss: 0.399507\n",
      "[455]\tvalid_0's binary_logloss: 0.399496\n",
      "[456]\tvalid_0's binary_logloss: 0.39948\n",
      "[457]\tvalid_0's binary_logloss: 0.399477\n",
      "[458]\tvalid_0's binary_logloss: 0.399475\n",
      "[459]\tvalid_0's binary_logloss: 0.399475\n",
      "[460]\tvalid_0's binary_logloss: 0.399467\n",
      "[461]\tvalid_0's binary_logloss: 0.399457\n",
      "[462]\tvalid_0's binary_logloss: 0.399457\n",
      "[463]\tvalid_0's binary_logloss: 0.399447\n",
      "[464]\tvalid_0's binary_logloss: 0.399452\n",
      "[465]\tvalid_0's binary_logloss: 0.399445\n",
      "[466]\tvalid_0's binary_logloss: 0.399446\n",
      "[467]\tvalid_0's binary_logloss: 0.399415\n",
      "[468]\tvalid_0's binary_logloss: 0.399386\n",
      "[469]\tvalid_0's binary_logloss: 0.399371\n",
      "[470]\tvalid_0's binary_logloss: 0.399348\n",
      "[471]\tvalid_0's binary_logloss: 0.399343\n",
      "[472]\tvalid_0's binary_logloss: 0.399351\n",
      "[473]\tvalid_0's binary_logloss: 0.399352\n",
      "[474]\tvalid_0's binary_logloss: 0.399348\n",
      "[475]\tvalid_0's binary_logloss: 0.399351\n",
      "[476]\tvalid_0's binary_logloss: 0.399352\n",
      "[477]\tvalid_0's binary_logloss: 0.399341\n",
      "[478]\tvalid_0's binary_logloss: 0.399317\n",
      "[479]\tvalid_0's binary_logloss: 0.399308\n",
      "[480]\tvalid_0's binary_logloss: 0.39929\n",
      "[481]\tvalid_0's binary_logloss: 0.399296\n",
      "[482]\tvalid_0's binary_logloss: 0.399293\n",
      "[483]\tvalid_0's binary_logloss: 0.399294\n",
      "[484]\tvalid_0's binary_logloss: 0.399286\n",
      "[485]\tvalid_0's binary_logloss: 0.399294\n",
      "[486]\tvalid_0's binary_logloss: 0.399288\n",
      "[487]\tvalid_0's binary_logloss: 0.399285\n",
      "[488]\tvalid_0's binary_logloss: 0.39929\n",
      "[489]\tvalid_0's binary_logloss: 0.399286\n",
      "[490]\tvalid_0's binary_logloss: 0.399293\n",
      "[491]\tvalid_0's binary_logloss: 0.399281\n",
      "[492]\tvalid_0's binary_logloss: 0.399279\n",
      "[493]\tvalid_0's binary_logloss: 0.399275\n",
      "[494]\tvalid_0's binary_logloss: 0.399278\n",
      "[495]\tvalid_0's binary_logloss: 0.399276\n",
      "[496]\tvalid_0's binary_logloss: 0.399276\n",
      "[497]\tvalid_0's binary_logloss: 0.39927\n",
      "[498]\tvalid_0's binary_logloss: 0.39927\n",
      "[499]\tvalid_0's binary_logloss: 0.399277\n",
      "[500]\tvalid_0's binary_logloss: 0.399278\n",
      "[501]\tvalid_0's binary_logloss: 0.399273\n",
      "[502]\tvalid_0's binary_logloss: 0.399265\n",
      "[503]\tvalid_0's binary_logloss: 0.399271\n",
      "[504]\tvalid_0's binary_logloss: 0.399261\n",
      "[505]\tvalid_0's binary_logloss: 0.399244\n",
      "[506]\tvalid_0's binary_logloss: 0.399253\n",
      "[507]\tvalid_0's binary_logloss: 0.399265\n",
      "[508]\tvalid_0's binary_logloss: 0.39926\n",
      "[509]\tvalid_0's binary_logloss: 0.399255\n",
      "[510]\tvalid_0's binary_logloss: 0.399262\n",
      "[511]\tvalid_0's binary_logloss: 0.399245\n",
      "[512]\tvalid_0's binary_logloss: 0.399231\n",
      "[513]\tvalid_0's binary_logloss: 0.39922\n",
      "[514]\tvalid_0's binary_logloss: 0.399205\n",
      "[515]\tvalid_0's binary_logloss: 0.399201\n",
      "[516]\tvalid_0's binary_logloss: 0.399208\n",
      "[517]\tvalid_0's binary_logloss: 0.399203\n",
      "[518]\tvalid_0's binary_logloss: 0.39921\n",
      "[519]\tvalid_0's binary_logloss: 0.399195\n",
      "[520]\tvalid_0's binary_logloss: 0.3992\n",
      "[521]\tvalid_0's binary_logloss: 0.399201\n",
      "[522]\tvalid_0's binary_logloss: 0.399192\n",
      "[523]\tvalid_0's binary_logloss: 0.399185\n",
      "[524]\tvalid_0's binary_logloss: 0.399179\n",
      "[525]\tvalid_0's binary_logloss: 0.399182\n",
      "[526]\tvalid_0's binary_logloss: 0.39918\n",
      "[527]\tvalid_0's binary_logloss: 0.399178\n",
      "[528]\tvalid_0's binary_logloss: 0.399169\n",
      "[529]\tvalid_0's binary_logloss: 0.399163\n",
      "[530]\tvalid_0's binary_logloss: 0.39916\n",
      "[531]\tvalid_0's binary_logloss: 0.399161\n",
      "[532]\tvalid_0's binary_logloss: 0.399166\n",
      "[533]\tvalid_0's binary_logloss: 0.399174\n",
      "[534]\tvalid_0's binary_logloss: 0.399173\n",
      "[535]\tvalid_0's binary_logloss: 0.399175\n",
      "[536]\tvalid_0's binary_logloss: 0.399172\n",
      "[537]\tvalid_0's binary_logloss: 0.399151\n",
      "[538]\tvalid_0's binary_logloss: 0.399147\n",
      "[539]\tvalid_0's binary_logloss: 0.399147\n",
      "[540]\tvalid_0's binary_logloss: 0.399139\n",
      "[541]\tvalid_0's binary_logloss: 0.39914\n",
      "[542]\tvalid_0's binary_logloss: 0.399143\n",
      "[543]\tvalid_0's binary_logloss: 0.399144\n",
      "[544]\tvalid_0's binary_logloss: 0.399142\n",
      "[545]\tvalid_0's binary_logloss: 0.399142\n",
      "[546]\tvalid_0's binary_logloss: 0.399129\n",
      "[547]\tvalid_0's binary_logloss: 0.399131\n",
      "[548]\tvalid_0's binary_logloss: 0.39913\n",
      "[549]\tvalid_0's binary_logloss: 0.399132\n",
      "[550]\tvalid_0's binary_logloss: 0.39913\n",
      "[551]\tvalid_0's binary_logloss: 0.399128\n",
      "[552]\tvalid_0's binary_logloss: 0.39914\n",
      "[553]\tvalid_0's binary_logloss: 0.399134\n",
      "[554]\tvalid_0's binary_logloss: 0.399136\n",
      "[555]\tvalid_0's binary_logloss: 0.399146\n",
      "[556]\tvalid_0's binary_logloss: 0.399139\n",
      "[557]\tvalid_0's binary_logloss: 0.399146\n",
      "[558]\tvalid_0's binary_logloss: 0.399146\n",
      "[559]\tvalid_0's binary_logloss: 0.399121\n",
      "[560]\tvalid_0's binary_logloss: 0.399108\n",
      "[561]\tvalid_0's binary_logloss: 0.399101\n",
      "[562]\tvalid_0's binary_logloss: 0.399096\n",
      "[563]\tvalid_0's binary_logloss: 0.3991\n",
      "[564]\tvalid_0's binary_logloss: 0.399104\n",
      "[565]\tvalid_0's binary_logloss: 0.399096\n",
      "[566]\tvalid_0's binary_logloss: 0.399098\n",
      "[567]\tvalid_0's binary_logloss: 0.399099\n",
      "[568]\tvalid_0's binary_logloss: 0.399089\n",
      "[569]\tvalid_0's binary_logloss: 0.399083\n",
      "[570]\tvalid_0's binary_logloss: 0.399077\n",
      "[571]\tvalid_0's binary_logloss: 0.399067\n",
      "[572]\tvalid_0's binary_logloss: 0.39907\n",
      "[573]\tvalid_0's binary_logloss: 0.399065\n",
      "[574]\tvalid_0's binary_logloss: 0.399066\n",
      "[575]\tvalid_0's binary_logloss: 0.399066\n",
      "[576]\tvalid_0's binary_logloss: 0.399062\n",
      "[577]\tvalid_0's binary_logloss: 0.399057\n",
      "[578]\tvalid_0's binary_logloss: 0.399044\n",
      "[579]\tvalid_0's binary_logloss: 0.399054\n",
      "[580]\tvalid_0's binary_logloss: 0.39905\n",
      "[581]\tvalid_0's binary_logloss: 0.399044\n",
      "[582]\tvalid_0's binary_logloss: 0.399043\n",
      "[583]\tvalid_0's binary_logloss: 0.399034\n",
      "[584]\tvalid_0's binary_logloss: 0.399036\n",
      "[585]\tvalid_0's binary_logloss: 0.399034\n",
      "[586]\tvalid_0's binary_logloss: 0.39903\n",
      "[587]\tvalid_0's binary_logloss: 0.399028\n",
      "[588]\tvalid_0's binary_logloss: 0.399028\n",
      "[589]\tvalid_0's binary_logloss: 0.399026\n",
      "[590]\tvalid_0's binary_logloss: 0.399031\n",
      "[591]\tvalid_0's binary_logloss: 0.399034\n",
      "[592]\tvalid_0's binary_logloss: 0.399023\n",
      "[593]\tvalid_0's binary_logloss: 0.39902\n",
      "[594]\tvalid_0's binary_logloss: 0.399021\n",
      "[595]\tvalid_0's binary_logloss: 0.399034\n",
      "[596]\tvalid_0's binary_logloss: 0.399024\n",
      "[597]\tvalid_0's binary_logloss: 0.399017\n",
      "[598]\tvalid_0's binary_logloss: 0.399021\n",
      "[599]\tvalid_0's binary_logloss: 0.39901\n",
      "[600]\tvalid_0's binary_logloss: 0.399012\n",
      "[601]\tvalid_0's binary_logloss: 0.399014\n",
      "[602]\tvalid_0's binary_logloss: 0.399025\n",
      "[603]\tvalid_0's binary_logloss: 0.399016\n",
      "[604]\tvalid_0's binary_logloss: 0.399012\n",
      "[605]\tvalid_0's binary_logloss: 0.399023\n",
      "[606]\tvalid_0's binary_logloss: 0.399024\n",
      "[607]\tvalid_0's binary_logloss: 0.399021\n",
      "[608]\tvalid_0's binary_logloss: 0.39903\n",
      "[609]\tvalid_0's binary_logloss: 0.399039\n",
      "[610]\tvalid_0's binary_logloss: 0.399038\n",
      "[611]\tvalid_0's binary_logloss: 0.399036\n",
      "[612]\tvalid_0's binary_logloss: 0.39904\n",
      "[613]\tvalid_0's binary_logloss: 0.399036\n",
      "[614]\tvalid_0's binary_logloss: 0.399034\n",
      "[615]\tvalid_0's binary_logloss: 0.39903\n",
      "[616]\tvalid_0's binary_logloss: 0.399029\n",
      "[617]\tvalid_0's binary_logloss: 0.399033\n",
      "[618]\tvalid_0's binary_logloss: 0.399025\n",
      "[619]\tvalid_0's binary_logloss: 0.399011\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[620]\tvalid_0's binary_logloss: 0.399008\n",
      "[621]\tvalid_0's binary_logloss: 0.399002\n",
      "[622]\tvalid_0's binary_logloss: 0.399007\n",
      "[623]\tvalid_0's binary_logloss: 0.398985\n",
      "[624]\tvalid_0's binary_logloss: 0.398971\n",
      "[625]\tvalid_0's binary_logloss: 0.398954\n",
      "[626]\tvalid_0's binary_logloss: 0.398954\n",
      "[627]\tvalid_0's binary_logloss: 0.398953\n",
      "[628]\tvalid_0's binary_logloss: 0.39895\n",
      "[629]\tvalid_0's binary_logloss: 0.398961\n",
      "[630]\tvalid_0's binary_logloss: 0.398958\n",
      "[631]\tvalid_0's binary_logloss: 0.398962\n",
      "[632]\tvalid_0's binary_logloss: 0.398965\n",
      "[633]\tvalid_0's binary_logloss: 0.398962\n",
      "[634]\tvalid_0's binary_logloss: 0.398959\n",
      "[635]\tvalid_0's binary_logloss: 0.398966\n",
      "[636]\tvalid_0's binary_logloss: 0.398965\n",
      "[637]\tvalid_0's binary_logloss: 0.398967\n",
      "[638]\tvalid_0's binary_logloss: 0.398974\n",
      "[639]\tvalid_0's binary_logloss: 0.398978\n",
      "[640]\tvalid_0's binary_logloss: 0.398979\n",
      "[641]\tvalid_0's binary_logloss: 0.398978\n",
      "[642]\tvalid_0's binary_logloss: 0.398991\n",
      "[643]\tvalid_0's binary_logloss: 0.398996\n",
      "[644]\tvalid_0's binary_logloss: 0.398992\n",
      "[645]\tvalid_0's binary_logloss: 0.398996\n",
      "[646]\tvalid_0's binary_logloss: 0.398988\n",
      "[647]\tvalid_0's binary_logloss: 0.398987\n",
      "[648]\tvalid_0's binary_logloss: 0.398995\n",
      "[649]\tvalid_0's binary_logloss: 0.398984\n",
      "[650]\tvalid_0's binary_logloss: 0.398985\n",
      "[651]\tvalid_0's binary_logloss: 0.39898\n",
      "[652]\tvalid_0's binary_logloss: 0.39898\n",
      "[653]\tvalid_0's binary_logloss: 0.398975\n",
      "[654]\tvalid_0's binary_logloss: 0.398971\n",
      "[655]\tvalid_0's binary_logloss: 0.398962\n",
      "[656]\tvalid_0's binary_logloss: 0.398961\n",
      "[657]\tvalid_0's binary_logloss: 0.398963\n",
      "[658]\tvalid_0's binary_logloss: 0.398969\n",
      "[659]\tvalid_0's binary_logloss: 0.398979\n",
      "[660]\tvalid_0's binary_logloss: 0.398977\n",
      "[661]\tvalid_0's binary_logloss: 0.39898\n",
      "[662]\tvalid_0's binary_logloss: 0.398973\n",
      "[663]\tvalid_0's binary_logloss: 0.398973\n",
      "[664]\tvalid_0's binary_logloss: 0.398966\n",
      "[665]\tvalid_0's binary_logloss: 0.398963\n",
      "[666]\tvalid_0's binary_logloss: 0.398955\n",
      "[667]\tvalid_0's binary_logloss: 0.398965\n",
      "[668]\tvalid_0's binary_logloss: 0.398971\n",
      "[669]\tvalid_0's binary_logloss: 0.398971\n",
      "[670]\tvalid_0's binary_logloss: 0.398972\n",
      "[671]\tvalid_0's binary_logloss: 0.398974\n",
      "[672]\tvalid_0's binary_logloss: 0.398974\n",
      "[673]\tvalid_0's binary_logloss: 0.398956\n",
      "[674]\tvalid_0's binary_logloss: 0.398961\n",
      "[675]\tvalid_0's binary_logloss: 0.398966\n",
      "[676]\tvalid_0's binary_logloss: 0.398963\n",
      "[677]\tvalid_0's binary_logloss: 0.398963\n",
      "[678]\tvalid_0's binary_logloss: 0.398964\n",
      "[679]\tvalid_0's binary_logloss: 0.398955\n",
      "[680]\tvalid_0's binary_logloss: 0.398955\n",
      "[681]\tvalid_0's binary_logloss: 0.398954\n",
      "[682]\tvalid_0's binary_logloss: 0.39896\n",
      "[683]\tvalid_0's binary_logloss: 0.398948\n",
      "[684]\tvalid_0's binary_logloss: 0.398941\n",
      "[685]\tvalid_0's binary_logloss: 0.398941\n",
      "[686]\tvalid_0's binary_logloss: 0.398935\n",
      "[687]\tvalid_0's binary_logloss: 0.398934\n",
      "[688]\tvalid_0's binary_logloss: 0.398942\n",
      "[689]\tvalid_0's binary_logloss: 0.398937\n",
      "[690]\tvalid_0's binary_logloss: 0.39894\n",
      "[691]\tvalid_0's binary_logloss: 0.39894\n",
      "[692]\tvalid_0's binary_logloss: 0.398936\n",
      "[693]\tvalid_0's binary_logloss: 0.398942\n",
      "[694]\tvalid_0's binary_logloss: 0.398941\n",
      "[695]\tvalid_0's binary_logloss: 0.398938\n",
      "[696]\tvalid_0's binary_logloss: 0.398936\n",
      "[697]\tvalid_0's binary_logloss: 0.398936\n",
      "[698]\tvalid_0's binary_logloss: 0.398941\n",
      "[699]\tvalid_0's binary_logloss: 0.398934\n",
      "[700]\tvalid_0's binary_logloss: 0.398929\n",
      "[701]\tvalid_0's binary_logloss: 0.398922\n",
      "[702]\tvalid_0's binary_logloss: 0.398929\n",
      "[703]\tvalid_0's binary_logloss: 0.398926\n",
      "[704]\tvalid_0's binary_logloss: 0.398929\n",
      "[705]\tvalid_0's binary_logloss: 0.398932\n",
      "[706]\tvalid_0's binary_logloss: 0.398928\n",
      "[707]\tvalid_0's binary_logloss: 0.398926\n",
      "[708]\tvalid_0's binary_logloss: 0.398928\n",
      "[709]\tvalid_0's binary_logloss: 0.398931\n",
      "[710]\tvalid_0's binary_logloss: 0.398942\n",
      "[711]\tvalid_0's binary_logloss: 0.398938\n",
      "[712]\tvalid_0's binary_logloss: 0.398936\n",
      "[713]\tvalid_0's binary_logloss: 0.398935\n",
      "[714]\tvalid_0's binary_logloss: 0.398918\n",
      "[715]\tvalid_0's binary_logloss: 0.398918\n",
      "[716]\tvalid_0's binary_logloss: 0.39891\n",
      "[717]\tvalid_0's binary_logloss: 0.398914\n",
      "[718]\tvalid_0's binary_logloss: 0.398907\n",
      "[719]\tvalid_0's binary_logloss: 0.398909\n",
      "[720]\tvalid_0's binary_logloss: 0.3989\n",
      "[721]\tvalid_0's binary_logloss: 0.398903\n",
      "[722]\tvalid_0's binary_logloss: 0.398891\n",
      "[723]\tvalid_0's binary_logloss: 0.398889\n",
      "[724]\tvalid_0's binary_logloss: 0.398878\n",
      "[725]\tvalid_0's binary_logloss: 0.398878\n",
      "[726]\tvalid_0's binary_logloss: 0.398882\n",
      "[727]\tvalid_0's binary_logloss: 0.398878\n",
      "[728]\tvalid_0's binary_logloss: 0.398885\n",
      "[729]\tvalid_0's binary_logloss: 0.398884\n",
      "[730]\tvalid_0's binary_logloss: 0.398877\n",
      "[731]\tvalid_0's binary_logloss: 0.398883\n",
      "[732]\tvalid_0's binary_logloss: 0.398878\n",
      "[733]\tvalid_0's binary_logloss: 0.398877\n",
      "[734]\tvalid_0's binary_logloss: 0.39888\n",
      "[735]\tvalid_0's binary_logloss: 0.398886\n",
      "[736]\tvalid_0's binary_logloss: 0.398876\n",
      "[737]\tvalid_0's binary_logloss: 0.398865\n",
      "[738]\tvalid_0's binary_logloss: 0.398862\n",
      "[739]\tvalid_0's binary_logloss: 0.398864\n",
      "[740]\tvalid_0's binary_logloss: 0.398862\n",
      "[741]\tvalid_0's binary_logloss: 0.398854\n",
      "[742]\tvalid_0's binary_logloss: 0.398852\n",
      "[743]\tvalid_0's binary_logloss: 0.398853\n",
      "[744]\tvalid_0's binary_logloss: 0.39885\n",
      "[745]\tvalid_0's binary_logloss: 0.398848\n",
      "[746]\tvalid_0's binary_logloss: 0.398845\n",
      "[747]\tvalid_0's binary_logloss: 0.398838\n",
      "[748]\tvalid_0's binary_logloss: 0.398841\n",
      "[749]\tvalid_0's binary_logloss: 0.398845\n",
      "[750]\tvalid_0's binary_logloss: 0.398841\n",
      "[751]\tvalid_0's binary_logloss: 0.398834\n",
      "[752]\tvalid_0's binary_logloss: 0.398822\n",
      "[753]\tvalid_0's binary_logloss: 0.398808\n",
      "[754]\tvalid_0's binary_logloss: 0.398815\n",
      "[755]\tvalid_0's binary_logloss: 0.398824\n",
      "[756]\tvalid_0's binary_logloss: 0.39884\n",
      "[757]\tvalid_0's binary_logloss: 0.398835\n",
      "[758]\tvalid_0's binary_logloss: 0.398837\n",
      "[759]\tvalid_0's binary_logloss: 0.398839\n",
      "[760]\tvalid_0's binary_logloss: 0.398843\n",
      "[761]\tvalid_0's binary_logloss: 0.398833\n",
      "[762]\tvalid_0's binary_logloss: 0.39883\n",
      "[763]\tvalid_0's binary_logloss: 0.398829\n",
      "[764]\tvalid_0's binary_logloss: 0.398821\n",
      "[765]\tvalid_0's binary_logloss: 0.398825\n",
      "[766]\tvalid_0's binary_logloss: 0.398827\n",
      "[767]\tvalid_0's binary_logloss: 0.398824\n",
      "[768]\tvalid_0's binary_logloss: 0.398825\n",
      "[769]\tvalid_0's binary_logloss: 0.398828\n",
      "[770]\tvalid_0's binary_logloss: 0.398831\n",
      "[771]\tvalid_0's binary_logloss: 0.398838\n",
      "[772]\tvalid_0's binary_logloss: 0.39883\n",
      "[773]\tvalid_0's binary_logloss: 0.398831\n",
      "[774]\tvalid_0's binary_logloss: 0.398832\n",
      "[775]\tvalid_0's binary_logloss: 0.398839\n",
      "[776]\tvalid_0's binary_logloss: 0.39884\n",
      "[777]\tvalid_0's binary_logloss: 0.398839\n",
      "[778]\tvalid_0's binary_logloss: 0.398838\n",
      "[779]\tvalid_0's binary_logloss: 0.398841\n",
      "[780]\tvalid_0's binary_logloss: 0.398842\n",
      "[781]\tvalid_0's binary_logloss: 0.398833\n",
      "[782]\tvalid_0's binary_logloss: 0.398823\n",
      "[783]\tvalid_0's binary_logloss: 0.398816\n",
      "[784]\tvalid_0's binary_logloss: 0.398816\n",
      "[785]\tvalid_0's binary_logloss: 0.398818\n",
      "[786]\tvalid_0's binary_logloss: 0.39881\n",
      "[787]\tvalid_0's binary_logloss: 0.398812\n",
      "[788]\tvalid_0's binary_logloss: 0.398819\n",
      "[789]\tvalid_0's binary_logloss: 0.398817\n",
      "[790]\tvalid_0's binary_logloss: 0.398801\n",
      "[791]\tvalid_0's binary_logloss: 0.398793\n",
      "[792]\tvalid_0's binary_logloss: 0.398803\n",
      "[793]\tvalid_0's binary_logloss: 0.398808\n",
      "[794]\tvalid_0's binary_logloss: 0.398812\n",
      "[795]\tvalid_0's binary_logloss: 0.398819\n",
      "[796]\tvalid_0's binary_logloss: 0.398814\n",
      "[797]\tvalid_0's binary_logloss: 0.398809\n",
      "[798]\tvalid_0's binary_logloss: 0.398811\n",
      "[799]\tvalid_0's binary_logloss: 0.398814\n",
      "[800]\tvalid_0's binary_logloss: 0.398811\n",
      "[801]\tvalid_0's binary_logloss: 0.398818\n",
      "[802]\tvalid_0's binary_logloss: 0.398833\n",
      "[803]\tvalid_0's binary_logloss: 0.398843\n",
      "[804]\tvalid_0's binary_logloss: 0.398855\n",
      "[805]\tvalid_0's binary_logloss: 0.398854\n",
      "[806]\tvalid_0's binary_logloss: 0.398853\n",
      "[807]\tvalid_0's binary_logloss: 0.398864\n",
      "[808]\tvalid_0's binary_logloss: 0.398861\n",
      "[809]\tvalid_0's binary_logloss: 0.398861\n",
      "[810]\tvalid_0's binary_logloss: 0.398854\n",
      "[811]\tvalid_0's binary_logloss: 0.398849\n",
      "[812]\tvalid_0's binary_logloss: 0.398854\n",
      "[813]\tvalid_0's binary_logloss: 0.398851\n",
      "[814]\tvalid_0's binary_logloss: 0.398843\n",
      "[815]\tvalid_0's binary_logloss: 0.398849\n",
      "[816]\tvalid_0's binary_logloss: 0.398845\n",
      "[817]\tvalid_0's binary_logloss: 0.398855\n",
      "[818]\tvalid_0's binary_logloss: 0.398856\n",
      "[819]\tvalid_0's binary_logloss: 0.39885\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[820]\tvalid_0's binary_logloss: 0.398858\n",
      "[821]\tvalid_0's binary_logloss: 0.398869\n",
      "[822]\tvalid_0's binary_logloss: 0.398861\n",
      "[823]\tvalid_0's binary_logloss: 0.398869\n",
      "[824]\tvalid_0's binary_logloss: 0.398868\n",
      "[825]\tvalid_0's binary_logloss: 0.398866\n",
      "[826]\tvalid_0's binary_logloss: 0.398859\n",
      "[827]\tvalid_0's binary_logloss: 0.398857\n",
      "[828]\tvalid_0's binary_logloss: 0.398858\n",
      "[829]\tvalid_0's binary_logloss: 0.398858\n",
      "[830]\tvalid_0's binary_logloss: 0.398864\n",
      "[831]\tvalid_0's binary_logloss: 0.398863\n",
      "[832]\tvalid_0's binary_logloss: 0.398861\n",
      "[833]\tvalid_0's binary_logloss: 0.398873\n",
      "[834]\tvalid_0's binary_logloss: 0.398871\n",
      "[835]\tvalid_0's binary_logloss: 0.39885\n",
      "[836]\tvalid_0's binary_logloss: 0.39885\n",
      "[837]\tvalid_0's binary_logloss: 0.398836\n",
      "[838]\tvalid_0's binary_logloss: 0.398835\n",
      "[839]\tvalid_0's binary_logloss: 0.39883\n",
      "[840]\tvalid_0's binary_logloss: 0.398823\n",
      "[841]\tvalid_0's binary_logloss: 0.398827\n",
      "[842]\tvalid_0's binary_logloss: 0.398823\n",
      "[843]\tvalid_0's binary_logloss: 0.398818\n",
      "[844]\tvalid_0's binary_logloss: 0.398816\n",
      "[845]\tvalid_0's binary_logloss: 0.398823\n",
      "[846]\tvalid_0's binary_logloss: 0.39882\n",
      "[847]\tvalid_0's binary_logloss: 0.398821\n",
      "[848]\tvalid_0's binary_logloss: 0.398823\n",
      "[849]\tvalid_0's binary_logloss: 0.398829\n",
      "[850]\tvalid_0's binary_logloss: 0.398824\n",
      "[851]\tvalid_0's binary_logloss: 0.398819\n",
      "[852]\tvalid_0's binary_logloss: 0.398811\n",
      "[853]\tvalid_0's binary_logloss: 0.39881\n",
      "[854]\tvalid_0's binary_logloss: 0.398809\n",
      "[855]\tvalid_0's binary_logloss: 0.398808\n",
      "[856]\tvalid_0's binary_logloss: 0.398813\n",
      "[857]\tvalid_0's binary_logloss: 0.398806\n",
      "[858]\tvalid_0's binary_logloss: 0.398805\n",
      "[859]\tvalid_0's binary_logloss: 0.398806\n",
      "[860]\tvalid_0's binary_logloss: 0.398819\n",
      "[861]\tvalid_0's binary_logloss: 0.398815\n",
      "[862]\tvalid_0's binary_logloss: 0.398826\n",
      "[863]\tvalid_0's binary_logloss: 0.398833\n",
      "[864]\tvalid_0's binary_logloss: 0.398832\n",
      "[865]\tvalid_0's binary_logloss: 0.39883\n",
      "[866]\tvalid_0's binary_logloss: 0.398831\n",
      "[867]\tvalid_0's binary_logloss: 0.398828\n",
      "[868]\tvalid_0's binary_logloss: 0.398837\n",
      "[869]\tvalid_0's binary_logloss: 0.398827\n",
      "[870]\tvalid_0's binary_logloss: 0.398831\n",
      "[871]\tvalid_0's binary_logloss: 0.39884\n",
      "[872]\tvalid_0's binary_logloss: 0.398849\n",
      "[873]\tvalid_0's binary_logloss: 0.398847\n",
      "[874]\tvalid_0's binary_logloss: 0.398841\n",
      "[875]\tvalid_0's binary_logloss: 0.398855\n",
      "[876]\tvalid_0's binary_logloss: 0.398848\n",
      "[877]\tvalid_0's binary_logloss: 0.398851\n",
      "[878]\tvalid_0's binary_logloss: 0.398848\n",
      "[879]\tvalid_0's binary_logloss: 0.398848\n",
      "[880]\tvalid_0's binary_logloss: 0.398836\n",
      "[881]\tvalid_0's binary_logloss: 0.398833\n",
      "[882]\tvalid_0's binary_logloss: 0.398835\n",
      "[883]\tvalid_0's binary_logloss: 0.398834\n",
      "[884]\tvalid_0's binary_logloss: 0.398836\n",
      "[885]\tvalid_0's binary_logloss: 0.398825\n",
      "[886]\tvalid_0's binary_logloss: 0.398831\n",
      "[887]\tvalid_0's binary_logloss: 0.398837\n",
      "[888]\tvalid_0's binary_logloss: 0.398842\n",
      "[889]\tvalid_0's binary_logloss: 0.398858\n",
      "[890]\tvalid_0's binary_logloss: 0.398856\n",
      "[891]\tvalid_0's binary_logloss: 0.398853\n",
      "[892]\tvalid_0's binary_logloss: 0.39885\n",
      "[893]\tvalid_0's binary_logloss: 0.398854\n",
      "[894]\tvalid_0's binary_logloss: 0.398849\n",
      "[895]\tvalid_0's binary_logloss: 0.398855\n",
      "[896]\tvalid_0's binary_logloss: 0.398862\n",
      "[897]\tvalid_0's binary_logloss: 0.398865\n",
      "[898]\tvalid_0's binary_logloss: 0.398874\n",
      "[899]\tvalid_0's binary_logloss: 0.398861\n",
      "[900]\tvalid_0's binary_logloss: 0.398843\n",
      "[901]\tvalid_0's binary_logloss: 0.398851\n",
      "[902]\tvalid_0's binary_logloss: 0.398855\n",
      "[903]\tvalid_0's binary_logloss: 0.398855\n",
      "[904]\tvalid_0's binary_logloss: 0.398859\n",
      "[905]\tvalid_0's binary_logloss: 0.398867\n",
      "[906]\tvalid_0's binary_logloss: 0.398873\n",
      "[907]\tvalid_0's binary_logloss: 0.398876\n",
      "[908]\tvalid_0's binary_logloss: 0.398878\n",
      "[909]\tvalid_0's binary_logloss: 0.398878\n",
      "[910]\tvalid_0's binary_logloss: 0.398889\n",
      "[911]\tvalid_0's binary_logloss: 0.398892\n",
      "[912]\tvalid_0's binary_logloss: 0.398892\n",
      "[913]\tvalid_0's binary_logloss: 0.398895\n",
      "[914]\tvalid_0's binary_logloss: 0.3989\n",
      "[915]\tvalid_0's binary_logloss: 0.398911\n",
      "[916]\tvalid_0's binary_logloss: 0.398915\n",
      "[917]\tvalid_0's binary_logloss: 0.398913\n",
      "[918]\tvalid_0's binary_logloss: 0.398922\n",
      "[919]\tvalid_0's binary_logloss: 0.398926\n",
      "[920]\tvalid_0's binary_logloss: 0.398927\n",
      "[921]\tvalid_0's binary_logloss: 0.398934\n",
      "[922]\tvalid_0's binary_logloss: 0.398938\n",
      "[923]\tvalid_0's binary_logloss: 0.398942\n",
      "[924]\tvalid_0's binary_logloss: 0.398947\n",
      "[925]\tvalid_0's binary_logloss: 0.39895\n",
      "[926]\tvalid_0's binary_logloss: 0.398948\n",
      "[927]\tvalid_0's binary_logloss: 0.398948\n",
      "[928]\tvalid_0's binary_logloss: 0.398956\n",
      "[929]\tvalid_0's binary_logloss: 0.398965\n",
      "[930]\tvalid_0's binary_logloss: 0.398966\n",
      "[931]\tvalid_0's binary_logloss: 0.398955\n",
      "[932]\tvalid_0's binary_logloss: 0.39895\n",
      "[933]\tvalid_0's binary_logloss: 0.398955\n",
      "[934]\tvalid_0's binary_logloss: 0.398952\n",
      "[935]\tvalid_0's binary_logloss: 0.398949\n",
      "[936]\tvalid_0's binary_logloss: 0.398943\n",
      "[937]\tvalid_0's binary_logloss: 0.39894\n",
      "[938]\tvalid_0's binary_logloss: 0.398936\n",
      "[939]\tvalid_0's binary_logloss: 0.398926\n",
      "[940]\tvalid_0's binary_logloss: 0.398926\n",
      "[941]\tvalid_0's binary_logloss: 0.398921\n",
      "[942]\tvalid_0's binary_logloss: 0.398922\n",
      "[943]\tvalid_0's binary_logloss: 0.398916\n",
      "[944]\tvalid_0's binary_logloss: 0.39891\n",
      "[945]\tvalid_0's binary_logloss: 0.398912\n",
      "[946]\tvalid_0's binary_logloss: 0.398912\n",
      "[947]\tvalid_0's binary_logloss: 0.398905\n",
      "[948]\tvalid_0's binary_logloss: 0.398898\n",
      "[949]\tvalid_0's binary_logloss: 0.398888\n",
      "[950]\tvalid_0's binary_logloss: 0.398882\n",
      "[951]\tvalid_0's binary_logloss: 0.398875\n",
      "[952]\tvalid_0's binary_logloss: 0.398874\n",
      "[953]\tvalid_0's binary_logloss: 0.39888\n",
      "[954]\tvalid_0's binary_logloss: 0.398876\n",
      "[955]\tvalid_0's binary_logloss: 0.398879\n",
      "[956]\tvalid_0's binary_logloss: 0.39888\n",
      "[957]\tvalid_0's binary_logloss: 0.39888\n",
      "[958]\tvalid_0's binary_logloss: 0.398877\n",
      "[959]\tvalid_0's binary_logloss: 0.398876\n",
      "[960]\tvalid_0's binary_logloss: 0.398883\n",
      "[961]\tvalid_0's binary_logloss: 0.398881\n",
      "[962]\tvalid_0's binary_logloss: 0.398883\n",
      "[963]\tvalid_0's binary_logloss: 0.39889\n",
      "[964]\tvalid_0's binary_logloss: 0.398894\n",
      "[965]\tvalid_0's binary_logloss: 0.398906\n",
      "[966]\tvalid_0's binary_logloss: 0.39892\n",
      "[967]\tvalid_0's binary_logloss: 0.398911\n",
      "[968]\tvalid_0's binary_logloss: 0.39891\n",
      "[969]\tvalid_0's binary_logloss: 0.398916\n",
      "[970]\tvalid_0's binary_logloss: 0.398914\n",
      "[971]\tvalid_0's binary_logloss: 0.398912\n",
      "[972]\tvalid_0's binary_logloss: 0.398909\n",
      "[973]\tvalid_0's binary_logloss: 0.398905\n",
      "[974]\tvalid_0's binary_logloss: 0.398902\n",
      "[975]\tvalid_0's binary_logloss: 0.398904\n",
      "[976]\tvalid_0's binary_logloss: 0.39891\n",
      "[977]\tvalid_0's binary_logloss: 0.398913\n",
      "[978]\tvalid_0's binary_logloss: 0.398911\n",
      "[979]\tvalid_0's binary_logloss: 0.398919\n",
      "[980]\tvalid_0's binary_logloss: 0.398903\n",
      "[981]\tvalid_0's binary_logloss: 0.398897\n",
      "[982]\tvalid_0's binary_logloss: 0.398891\n",
      "[983]\tvalid_0's binary_logloss: 0.398903\n",
      "[984]\tvalid_0's binary_logloss: 0.398895\n",
      "[985]\tvalid_0's binary_logloss: 0.398896\n",
      "[986]\tvalid_0's binary_logloss: 0.39889\n",
      "[987]\tvalid_0's binary_logloss: 0.398894\n",
      "[988]\tvalid_0's binary_logloss: 0.398892\n",
      "[989]\tvalid_0's binary_logloss: 0.398898\n",
      "[990]\tvalid_0's binary_logloss: 0.398905\n",
      "[991]\tvalid_0's binary_logloss: 0.398896\n",
      "[992]\tvalid_0's binary_logloss: 0.398898\n",
      "[993]\tvalid_0's binary_logloss: 0.398897\n",
      "[994]\tvalid_0's binary_logloss: 0.398889\n",
      "[995]\tvalid_0's binary_logloss: 0.398892\n",
      "[996]\tvalid_0's binary_logloss: 0.398897\n",
      "[997]\tvalid_0's binary_logloss: 0.398888\n",
      "[998]\tvalid_0's binary_logloss: 0.398887\n",
      "[999]\tvalid_0's binary_logloss: 0.398887\n",
      "[1000]\tvalid_0's binary_logloss: 0.398876\n",
      "[1001]\tvalid_0's binary_logloss: 0.39888\n",
      "[1002]\tvalid_0's binary_logloss: 0.398885\n",
      "[1003]\tvalid_0's binary_logloss: 0.39889\n",
      "[1004]\tvalid_0's binary_logloss: 0.398886\n",
      "[1005]\tvalid_0's binary_logloss: 0.398891\n",
      "[1006]\tvalid_0's binary_logloss: 0.398895\n",
      "[1007]\tvalid_0's binary_logloss: 0.398891\n",
      "[1008]\tvalid_0's binary_logloss: 0.398884\n",
      "[1009]\tvalid_0's binary_logloss: 0.398893\n",
      "[1010]\tvalid_0's binary_logloss: 0.398889\n",
      "[1011]\tvalid_0's binary_logloss: 0.398882\n",
      "[1012]\tvalid_0's binary_logloss: 0.398873\n",
      "[1013]\tvalid_0's binary_logloss: 0.398867\n",
      "[1014]\tvalid_0's binary_logloss: 0.398868\n",
      "[1015]\tvalid_0's binary_logloss: 0.398859\n",
      "[1016]\tvalid_0's binary_logloss: 0.398868\n",
      "[1017]\tvalid_0's binary_logloss: 0.398863\n",
      "[1018]\tvalid_0's binary_logloss: 0.398869\n",
      "[1019]\tvalid_0's binary_logloss: 0.398862\n",
      "[1020]\tvalid_0's binary_logloss: 0.398872\n",
      "[1021]\tvalid_0's binary_logloss: 0.398878\n",
      "[1022]\tvalid_0's binary_logloss: 0.398882\n",
      "[1023]\tvalid_0's binary_logloss: 0.398885\n",
      "[1024]\tvalid_0's binary_logloss: 0.398889\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1025]\tvalid_0's binary_logloss: 0.398895\n",
      "[1026]\tvalid_0's binary_logloss: 0.398897\n",
      "[1027]\tvalid_0's binary_logloss: 0.398899\n",
      "[1028]\tvalid_0's binary_logloss: 0.398904\n",
      "[1029]\tvalid_0's binary_logloss: 0.398921\n",
      "[1030]\tvalid_0's binary_logloss: 0.398921\n",
      "[1031]\tvalid_0's binary_logloss: 0.398926\n",
      "[1032]\tvalid_0's binary_logloss: 0.398921\n",
      "[1033]\tvalid_0's binary_logloss: 0.398913\n",
      "[1034]\tvalid_0's binary_logloss: 0.398926\n",
      "[1035]\tvalid_0's binary_logloss: 0.398936\n",
      "[1036]\tvalid_0's binary_logloss: 0.398928\n",
      "[1037]\tvalid_0's binary_logloss: 0.398934\n",
      "[1038]\tvalid_0's binary_logloss: 0.398933\n",
      "[1039]\tvalid_0's binary_logloss: 0.398937\n",
      "[1040]\tvalid_0's binary_logloss: 0.398933\n",
      "[1041]\tvalid_0's binary_logloss: 0.398943\n",
      "[1042]\tvalid_0's binary_logloss: 0.398949\n",
      "[1043]\tvalid_0's binary_logloss: 0.398945\n",
      "[1044]\tvalid_0's binary_logloss: 0.398942\n",
      "[1045]\tvalid_0's binary_logloss: 0.39895\n",
      "[1046]\tvalid_0's binary_logloss: 0.398956\n",
      "[1047]\tvalid_0's binary_logloss: 0.398948\n",
      "[1048]\tvalid_0's binary_logloss: 0.398939\n",
      "[1049]\tvalid_0's binary_logloss: 0.398952\n",
      "[1050]\tvalid_0's binary_logloss: 0.398957\n",
      "[1051]\tvalid_0's binary_logloss: 0.398966\n",
      "[1052]\tvalid_0's binary_logloss: 0.398967\n",
      "[1053]\tvalid_0's binary_logloss: 0.398964\n",
      "[1054]\tvalid_0's binary_logloss: 0.398971\n",
      "[1055]\tvalid_0's binary_logloss: 0.398971\n",
      "[1056]\tvalid_0's binary_logloss: 0.398967\n",
      "[1057]\tvalid_0's binary_logloss: 0.398964\n",
      "[1058]\tvalid_0's binary_logloss: 0.398967\n",
      "[1059]\tvalid_0's binary_logloss: 0.398974\n",
      "[1060]\tvalid_0's binary_logloss: 0.398971\n",
      "[1061]\tvalid_0's binary_logloss: 0.398972\n",
      "[1062]\tvalid_0's binary_logloss: 0.398969\n",
      "[1063]\tvalid_0's binary_logloss: 0.398963\n",
      "[1064]\tvalid_0's binary_logloss: 0.398968\n",
      "[1065]\tvalid_0's binary_logloss: 0.398964\n",
      "[1066]\tvalid_0's binary_logloss: 0.398964\n",
      "[1067]\tvalid_0's binary_logloss: 0.398956\n",
      "[1068]\tvalid_0's binary_logloss: 0.398954\n",
      "[1069]\tvalid_0's binary_logloss: 0.39895\n",
      "[1070]\tvalid_0's binary_logloss: 0.39895\n",
      "[1071]\tvalid_0's binary_logloss: 0.398951\n",
      "[1072]\tvalid_0's binary_logloss: 0.398957\n",
      "[1073]\tvalid_0's binary_logloss: 0.398946\n",
      "[1074]\tvalid_0's binary_logloss: 0.398948\n",
      "[1075]\tvalid_0's binary_logloss: 0.398955\n",
      "[1076]\tvalid_0's binary_logloss: 0.398957\n",
      "[1077]\tvalid_0's binary_logloss: 0.398958\n",
      "[1078]\tvalid_0's binary_logloss: 0.398959\n",
      "[1079]\tvalid_0's binary_logloss: 0.398951\n",
      "[1080]\tvalid_0's binary_logloss: 0.398953\n",
      "[1081]\tvalid_0's binary_logloss: 0.398949\n",
      "[1082]\tvalid_0's binary_logloss: 0.39895\n",
      "[1083]\tvalid_0's binary_logloss: 0.398947\n",
      "[1084]\tvalid_0's binary_logloss: 0.398948\n",
      "[1085]\tvalid_0's binary_logloss: 0.398949\n",
      "[1086]\tvalid_0's binary_logloss: 0.398949\n",
      "[1087]\tvalid_0's binary_logloss: 0.398948\n",
      "[1088]\tvalid_0's binary_logloss: 0.398952\n",
      "[1089]\tvalid_0's binary_logloss: 0.398956\n",
      "[1090]\tvalid_0's binary_logloss: 0.398948\n",
      "[1091]\tvalid_0's binary_logloss: 0.39895\n",
      "[1092]\tvalid_0's binary_logloss: 0.398944\n",
      "[1093]\tvalid_0's binary_logloss: 0.398944\n",
      "[1094]\tvalid_0's binary_logloss: 0.398947\n",
      "[1095]\tvalid_0's binary_logloss: 0.398948\n",
      "[1096]\tvalid_0's binary_logloss: 0.398943\n",
      "[1097]\tvalid_0's binary_logloss: 0.398929\n",
      "[1098]\tvalid_0's binary_logloss: 0.398931\n",
      "[1099]\tvalid_0's binary_logloss: 0.398931\n",
      "[1100]\tvalid_0's binary_logloss: 0.39893\n",
      "[1101]\tvalid_0's binary_logloss: 0.398933\n",
      "[1102]\tvalid_0's binary_logloss: 0.398939\n",
      "[1103]\tvalid_0's binary_logloss: 0.398942\n",
      "[1104]\tvalid_0's binary_logloss: 0.398934\n",
      "[1105]\tvalid_0's binary_logloss: 0.398949\n",
      "[1106]\tvalid_0's binary_logloss: 0.398951\n",
      "[1107]\tvalid_0's binary_logloss: 0.39895\n",
      "[1108]\tvalid_0's binary_logloss: 0.398956\n",
      "[1109]\tvalid_0's binary_logloss: 0.39895\n",
      "[1110]\tvalid_0's binary_logloss: 0.398954\n",
      "[1111]\tvalid_0's binary_logloss: 0.398945\n",
      "[1112]\tvalid_0's binary_logloss: 0.398939\n",
      "[1113]\tvalid_0's binary_logloss: 0.398942\n",
      "[1114]\tvalid_0's binary_logloss: 0.398947\n",
      "[1115]\tvalid_0's binary_logloss: 0.398948\n",
      "[1116]\tvalid_0's binary_logloss: 0.398951\n",
      "[1117]\tvalid_0's binary_logloss: 0.398952\n",
      "[1118]\tvalid_0's binary_logloss: 0.398954\n",
      "[1119]\tvalid_0's binary_logloss: 0.398958\n",
      "[1120]\tvalid_0's binary_logloss: 0.398952\n",
      "[1121]\tvalid_0's binary_logloss: 0.398947\n",
      "[1122]\tvalid_0's binary_logloss: 0.39894\n",
      "[1123]\tvalid_0's binary_logloss: 0.398943\n",
      "[1124]\tvalid_0's binary_logloss: 0.398939\n",
      "[1125]\tvalid_0's binary_logloss: 0.398948\n",
      "[1126]\tvalid_0's binary_logloss: 0.398935\n",
      "[1127]\tvalid_0's binary_logloss: 0.398925\n",
      "[1128]\tvalid_0's binary_logloss: 0.398936\n",
      "[1129]\tvalid_0's binary_logloss: 0.398931\n",
      "[1130]\tvalid_0's binary_logloss: 0.398938\n",
      "[1131]\tvalid_0's binary_logloss: 0.398941\n",
      "[1132]\tvalid_0's binary_logloss: 0.398946\n",
      "[1133]\tvalid_0's binary_logloss: 0.398951\n",
      "[1134]\tvalid_0's binary_logloss: 0.398962\n",
      "[1135]\tvalid_0's binary_logloss: 0.398969\n",
      "[1136]\tvalid_0's binary_logloss: 0.398973\n",
      "[1137]\tvalid_0's binary_logloss: 0.398984\n",
      "[1138]\tvalid_0's binary_logloss: 0.398987\n",
      "[1139]\tvalid_0's binary_logloss: 0.398999\n",
      "[1140]\tvalid_0's binary_logloss: 0.399004\n",
      "[1141]\tvalid_0's binary_logloss: 0.399004\n",
      "[1142]\tvalid_0's binary_logloss: 0.399005\n",
      "[1143]\tvalid_0's binary_logloss: 0.399012\n",
      "[1144]\tvalid_0's binary_logloss: 0.399013\n",
      "[1145]\tvalid_0's binary_logloss: 0.39901\n",
      "[1146]\tvalid_0's binary_logloss: 0.39901\n",
      "[1147]\tvalid_0's binary_logloss: 0.398999\n",
      "[1148]\tvalid_0's binary_logloss: 0.398991\n",
      "[1149]\tvalid_0's binary_logloss: 0.398988\n",
      "[1150]\tvalid_0's binary_logloss: 0.398995\n",
      "[1151]\tvalid_0's binary_logloss: 0.398992\n",
      "[1152]\tvalid_0's binary_logloss: 0.398994\n",
      "[1153]\tvalid_0's binary_logloss: 0.399003\n",
      "[1154]\tvalid_0's binary_logloss: 0.399005\n",
      "[1155]\tvalid_0's binary_logloss: 0.399014\n",
      "[1156]\tvalid_0's binary_logloss: 0.399015\n",
      "[1157]\tvalid_0's binary_logloss: 0.399013\n",
      "[1158]\tvalid_0's binary_logloss: 0.399015\n",
      "[1159]\tvalid_0's binary_logloss: 0.399008\n",
      "[1160]\tvalid_0's binary_logloss: 0.399005\n",
      "[1161]\tvalid_0's binary_logloss: 0.399007\n",
      "[1162]\tvalid_0's binary_logloss: 0.399009\n",
      "[1163]\tvalid_0's binary_logloss: 0.399003\n",
      "[1164]\tvalid_0's binary_logloss: 0.399009\n",
      "[1165]\tvalid_0's binary_logloss: 0.399003\n",
      "[1166]\tvalid_0's binary_logloss: 0.399003\n",
      "[1167]\tvalid_0's binary_logloss: 0.399016\n",
      "[1168]\tvalid_0's binary_logloss: 0.399014\n",
      "[1169]\tvalid_0's binary_logloss: 0.399006\n",
      "[1170]\tvalid_0's binary_logloss: 0.399009\n",
      "[1171]\tvalid_0's binary_logloss: 0.399002\n",
      "[1172]\tvalid_0's binary_logloss: 0.398994\n",
      "[1173]\tvalid_0's binary_logloss: 0.399002\n",
      "[1174]\tvalid_0's binary_logloss: 0.398999\n",
      "[1175]\tvalid_0's binary_logloss: 0.398999\n",
      "[1176]\tvalid_0's binary_logloss: 0.399001\n",
      "[1177]\tvalid_0's binary_logloss: 0.399003\n",
      "[1178]\tvalid_0's binary_logloss: 0.399007\n",
      "[1179]\tvalid_0's binary_logloss: 0.399001\n",
      "[1180]\tvalid_0's binary_logloss: 0.399004\n",
      "[1181]\tvalid_0's binary_logloss: 0.398998\n",
      "[1182]\tvalid_0's binary_logloss: 0.399\n",
      "[1183]\tvalid_0's binary_logloss: 0.399\n",
      "[1184]\tvalid_0's binary_logloss: 0.398997\n",
      "[1185]\tvalid_0's binary_logloss: 0.398989\n",
      "[1186]\tvalid_0's binary_logloss: 0.398991\n",
      "[1187]\tvalid_0's binary_logloss: 0.398987\n",
      "[1188]\tvalid_0's binary_logloss: 0.399001\n",
      "[1189]\tvalid_0's binary_logloss: 0.399001\n",
      "[1190]\tvalid_0's binary_logloss: 0.398998\n",
      "[1191]\tvalid_0's binary_logloss: 0.398999\n",
      "[1192]\tvalid_0's binary_logloss: 0.399006\n",
      "[1193]\tvalid_0's binary_logloss: 0.399013\n",
      "[1194]\tvalid_0's binary_logloss: 0.399024\n",
      "[1195]\tvalid_0's binary_logloss: 0.399026\n",
      "[1196]\tvalid_0's binary_logloss: 0.399021\n",
      "[1197]\tvalid_0's binary_logloss: 0.39902\n",
      "[1198]\tvalid_0's binary_logloss: 0.399027\n",
      "[1199]\tvalid_0's binary_logloss: 0.399031\n",
      "[1200]\tvalid_0's binary_logloss: 0.399034\n",
      "[1201]\tvalid_0's binary_logloss: 0.399027\n",
      "[1202]\tvalid_0's binary_logloss: 0.399025\n",
      "[1203]\tvalid_0's binary_logloss: 0.399031\n",
      "[1204]\tvalid_0's binary_logloss: 0.399037\n",
      "[1205]\tvalid_0's binary_logloss: 0.399026\n",
      "[1206]\tvalid_0's binary_logloss: 0.39904\n",
      "[1207]\tvalid_0's binary_logloss: 0.399058\n",
      "[1208]\tvalid_0's binary_logloss: 0.399062\n",
      "[1209]\tvalid_0's binary_logloss: 0.399066\n",
      "[1210]\tvalid_0's binary_logloss: 0.399072\n",
      "[1211]\tvalid_0's binary_logloss: 0.399065\n",
      "[1212]\tvalid_0's binary_logloss: 0.399069\n",
      "[1213]\tvalid_0's binary_logloss: 0.399074\n",
      "[1214]\tvalid_0's binary_logloss: 0.399075\n",
      "[1215]\tvalid_0's binary_logloss: 0.399077\n",
      "[1216]\tvalid_0's binary_logloss: 0.399077\n",
      "[1217]\tvalid_0's binary_logloss: 0.399069\n",
      "[1218]\tvalid_0's binary_logloss: 0.399067\n",
      "[1219]\tvalid_0's binary_logloss: 0.399058\n",
      "[1220]\tvalid_0's binary_logloss: 0.399059\n",
      "[1221]\tvalid_0's binary_logloss: 0.399064\n",
      "[1222]\tvalid_0's binary_logloss: 0.399063\n",
      "[1223]\tvalid_0's binary_logloss: 0.399061\n",
      "[1224]\tvalid_0's binary_logloss: 0.399066\n",
      "[1225]\tvalid_0's binary_logloss: 0.399054\n",
      "[1226]\tvalid_0's binary_logloss: 0.399052\n",
      "[1227]\tvalid_0's binary_logloss: 0.399051\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1228]\tvalid_0's binary_logloss: 0.399054\n",
      "[1229]\tvalid_0's binary_logloss: 0.399064\n",
      "[1230]\tvalid_0's binary_logloss: 0.39907\n",
      "[1231]\tvalid_0's binary_logloss: 0.39908\n",
      "[1232]\tvalid_0's binary_logloss: 0.399084\n",
      "[1233]\tvalid_0's binary_logloss: 0.399088\n",
      "[1234]\tvalid_0's binary_logloss: 0.399089\n",
      "[1235]\tvalid_0's binary_logloss: 0.399097\n",
      "[1236]\tvalid_0's binary_logloss: 0.399099\n",
      "[1237]\tvalid_0's binary_logloss: 0.399091\n",
      "[1238]\tvalid_0's binary_logloss: 0.399088\n",
      "[1239]\tvalid_0's binary_logloss: 0.399089\n",
      "[1240]\tvalid_0's binary_logloss: 0.399088\n",
      "[1241]\tvalid_0's binary_logloss: 0.399079\n",
      "[1242]\tvalid_0's binary_logloss: 0.399083\n",
      "[1243]\tvalid_0's binary_logloss: 0.399079\n",
      "[1244]\tvalid_0's binary_logloss: 0.399089\n",
      "[1245]\tvalid_0's binary_logloss: 0.399085\n",
      "[1246]\tvalid_0's binary_logloss: 0.399083\n",
      "[1247]\tvalid_0's binary_logloss: 0.399076\n",
      "[1248]\tvalid_0's binary_logloss: 0.399075\n",
      "[1249]\tvalid_0's binary_logloss: 0.399081\n",
      "[1250]\tvalid_0's binary_logloss: 0.399078\n",
      "[1251]\tvalid_0's binary_logloss: 0.399076\n",
      "[1252]\tvalid_0's binary_logloss: 0.399074\n",
      "[1253]\tvalid_0's binary_logloss: 0.39907\n",
      "[1254]\tvalid_0's binary_logloss: 0.39907\n",
      "[1255]\tvalid_0's binary_logloss: 0.399074\n",
      "[1256]\tvalid_0's binary_logloss: 0.399072\n",
      "[1257]\tvalid_0's binary_logloss: 0.399083\n",
      "[1258]\tvalid_0's binary_logloss: 0.399094\n",
      "[1259]\tvalid_0's binary_logloss: 0.399092\n",
      "[1260]\tvalid_0's binary_logloss: 0.399084\n",
      "[1261]\tvalid_0's binary_logloss: 0.399085\n",
      "[1262]\tvalid_0's binary_logloss: 0.399091\n",
      "[1263]\tvalid_0's binary_logloss: 0.399093\n",
      "[1264]\tvalid_0's binary_logloss: 0.399086\n",
      "[1265]\tvalid_0's binary_logloss: 0.399091\n",
      "[1266]\tvalid_0's binary_logloss: 0.399082\n",
      "[1267]\tvalid_0's binary_logloss: 0.399081\n",
      "[1268]\tvalid_0's binary_logloss: 0.399087\n",
      "[1269]\tvalid_0's binary_logloss: 0.399079\n",
      "[1270]\tvalid_0's binary_logloss: 0.399074\n",
      "[1271]\tvalid_0's binary_logloss: 0.399072\n",
      "[1272]\tvalid_0's binary_logloss: 0.39907\n",
      "[1273]\tvalid_0's binary_logloss: 0.399071\n",
      "[1274]\tvalid_0's binary_logloss: 0.399072\n",
      "[1275]\tvalid_0's binary_logloss: 0.399068\n",
      "[1276]\tvalid_0's binary_logloss: 0.399069\n",
      "[1277]\tvalid_0's binary_logloss: 0.399076\n",
      "[1278]\tvalid_0's binary_logloss: 0.399085\n",
      "[1279]\tvalid_0's binary_logloss: 0.39909\n",
      "[1280]\tvalid_0's binary_logloss: 0.399088\n",
      "[1281]\tvalid_0's binary_logloss: 0.399093\n",
      "[1282]\tvalid_0's binary_logloss: 0.399091\n",
      "[1283]\tvalid_0's binary_logloss: 0.399092\n",
      "[1284]\tvalid_0's binary_logloss: 0.399094\n",
      "[1285]\tvalid_0's binary_logloss: 0.399099\n",
      "[1286]\tvalid_0's binary_logloss: 0.399097\n",
      "[1287]\tvalid_0's binary_logloss: 0.399104\n",
      "[1288]\tvalid_0's binary_logloss: 0.399102\n",
      "[1289]\tvalid_0's binary_logloss: 0.399098\n",
      "[1290]\tvalid_0's binary_logloss: 0.399105\n",
      "[1291]\tvalid_0's binary_logloss: 0.399111\n",
      "Early stopping, best iteration is:\n",
      "[791]\tvalid_0's binary_logloss: 0.398793\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# 配置模型参数\n",
    "params = {\n",
    "    'task': 'train',\n",
    "    'boosting_type': 'gbdt',\n",
    "    'objective': 'binary',\n",
    "    'metric': { 'binary_logloss'},\n",
    "    'num_leaves': 31, # 每棵树的默认叶子数\n",
    "    'learning_rate': 0.08,\n",
    "    'feature_fraction': 0.7, # 将在训练每棵树之前选择70％的特征\n",
    "    'bagging_fraction': 0.3, #随机选择30%的特征。\n",
    "    'bagging_freq': 5, #  每5次迭代执行bagging\n",
    "    'verbose': 0\n",
    "}\n",
    "\n",
    "print('开始训练...')\n",
    "\n",
    "gbm = lgb.train(params,\n",
    "                lgb_train,\n",
    "                num_boost_round=4000,\n",
    "                valid_sets=lgb_eval,\n",
    "                early_stopping_rounds=500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "defaultdict(<class 'dict'>, {'valid_0': {'binary_logloss': 0.39879332755938357}})\n",
      "791\n"
     ]
    }
   ],
   "source": [
    "print(gbm.best_score)\n",
    "print(gbm.best_iteration)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XGBoost 模型\n",
    "\n",
    "<a href=\"https://xgboost.readthedocs.io/en/latest/\">XGBoost</a>是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型，所以它是将许多树模型集成在一起，形成一个很强的分类器。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_default_test(train, test, features, target, random_state=0):\n",
    "    eta = 0.1\n",
    "    max_depth = 5\n",
    "    subsample = 0.8\n",
    "    colsample_bytree = 0.8\n",
    "    params = {\n",
    "        \"objective\": \"binary:logistic\",\n",
    "        \"booster\" : \"gbtree\",\n",
    "        \"eval_metric\": \"logloss\",\n",
    "        \"eta\": eta,\n",
    "        \"max_depth\": max_depth,\n",
    "        \"subsample\": subsample,\n",
    "        \"colsample_bytree\": colsample_bytree,\n",
    "        \"silent\": 1,\n",
    "        \"seed\": random_state\n",
    "    }\n",
    "    num_boost_round = 260\n",
    "    early_stopping_rounds = 20\n",
    "    test_size = 0.2\n",
    "\n",
    "    X_train, X_valid = train_test_split(train, test_size=test_size, random_state=random_state)\n",
    "    y_train = X_train[target]\n",
    "    y_valid = X_valid[target]\n",
    "    dtrain = xgb.DMatrix(X_train[features], y_train)\n",
    "    dvalid = xgb.DMatrix(X_valid[features], y_valid)\n",
    "    watchlist = [(dtrain, 'train'), (dvalid, 'eval')]\n",
    "    gbm = xgb.train(params, dtrain, num_boost_round, evals=watchlist, early_stopping_rounds=early_stopping_rounds, verbose_eval=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\ProgramData\\Anaconda3\\lib\\site-packages\\xgboost\\core.py:587: FutureWarning: Series.base is deprecated and will be removed in a future version\n",
      "  if getattr(data, 'base', None) is not None and \\\n",
      "d:\\ProgramData\\Anaconda3\\lib\\site-packages\\xgboost\\core.py:588: FutureWarning: Series.base is deprecated and will be removed in a future version\n",
      "  data.base is not None and isinstance(data, np.ndarray) \\\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-logloss:0.648202\teval-logloss:0.648482\n",
      "Multiple eval metrics have been passed: 'eval-logloss' will be used for early stopping.\n",
      "\n",
      "Will train until eval-logloss hasn't improved in 20 rounds.\n",
      "[1]\ttrain-logloss:0.611812\teval-logloss:0.612024\n",
      "[2]\ttrain-logloss:0.581816\teval-logloss:0.582063\n",
      "[3]\ttrain-logloss:0.556549\teval-logloss:0.557064\n",
      "[4]\ttrain-logloss:0.535814\teval-logloss:0.536118\n",
      "[5]\ttrain-logloss:0.517958\teval-logloss:0.518558\n",
      "[6]\ttrain-logloss:0.502994\teval-logloss:0.50364\n",
      "[7]\ttrain-logloss:0.490596\teval-logloss:0.491261\n",
      "[8]\ttrain-logloss:0.479941\teval-logloss:0.480669\n",
      "[9]\ttrain-logloss:0.470785\teval-logloss:0.471492\n",
      "[10]\ttrain-logloss:0.463122\teval-logloss:0.463869\n",
      "[11]\ttrain-logloss:0.45646\teval-logloss:0.457213\n",
      "[12]\ttrain-logloss:0.450839\teval-logloss:0.451555\n",
      "[13]\ttrain-logloss:0.446007\teval-logloss:0.446811\n",
      "[14]\ttrain-logloss:0.441838\teval-logloss:0.442608\n",
      "[15]\ttrain-logloss:0.438173\teval-logloss:0.43901\n",
      "[16]\ttrain-logloss:0.435234\teval-logloss:0.436098\n",
      "[17]\ttrain-logloss:0.432811\teval-logloss:0.433679\n",
      "[18]\ttrain-logloss:0.430664\teval-logloss:0.431539\n",
      "[19]\ttrain-logloss:0.428844\teval-logloss:0.429709\n",
      "[20]\ttrain-logloss:0.427242\teval-logloss:0.428106\n",
      "[21]\ttrain-logloss:0.425909\teval-logloss:0.426819\n",
      "[22]\ttrain-logloss:0.424743\teval-logloss:0.425673\n",
      "[23]\ttrain-logloss:0.423717\teval-logloss:0.424661\n",
      "[24]\ttrain-logloss:0.422768\teval-logloss:0.423749\n",
      "[25]\ttrain-logloss:0.421947\teval-logloss:0.422912\n",
      "[26]\ttrain-logloss:0.421313\teval-logloss:0.422268\n",
      "[27]\ttrain-logloss:0.420647\teval-logloss:0.421645\n",
      "[28]\ttrain-logloss:0.41985\teval-logloss:0.420835\n",
      "[29]\ttrain-logloss:0.419281\teval-logloss:0.420271\n",
      "[30]\ttrain-logloss:0.418854\teval-logloss:0.41988\n",
      "[31]\ttrain-logloss:0.418329\teval-logloss:0.419392\n",
      "[32]\ttrain-logloss:0.417988\teval-logloss:0.419038\n",
      "[33]\ttrain-logloss:0.417455\teval-logloss:0.418506\n",
      "[34]\ttrain-logloss:0.417182\teval-logloss:0.418232\n",
      "[35]\ttrain-logloss:0.416796\teval-logloss:0.417869\n",
      "[36]\ttrain-logloss:0.416541\teval-logloss:0.417632\n",
      "[37]\ttrain-logloss:0.416249\teval-logloss:0.417374\n",
      "[38]\ttrain-logloss:0.415979\teval-logloss:0.417077\n",
      "[39]\ttrain-logloss:0.415615\teval-logloss:0.416748\n",
      "[40]\ttrain-logloss:0.415409\teval-logloss:0.416551\n",
      "[41]\ttrain-logloss:0.415238\teval-logloss:0.416376\n",
      "[42]\ttrain-logloss:0.414928\teval-logloss:0.416093\n",
      "[43]\ttrain-logloss:0.414788\teval-logloss:0.415934\n",
      "[44]\ttrain-logloss:0.414658\teval-logloss:0.415817\n",
      "[45]\ttrain-logloss:0.414423\teval-logloss:0.415599\n",
      "[46]\ttrain-logloss:0.414296\teval-logloss:0.415471\n",
      "[47]\ttrain-logloss:0.413996\teval-logloss:0.415189\n",
      "[48]\ttrain-logloss:0.413684\teval-logloss:0.414891\n",
      "[49]\ttrain-logloss:0.413493\teval-logloss:0.414722\n",
      "[50]\ttrain-logloss:0.413347\teval-logloss:0.414585\n",
      "[51]\ttrain-logloss:0.413164\teval-logloss:0.414415\n",
      "[52]\ttrain-logloss:0.412888\teval-logloss:0.414135\n",
      "[53]\ttrain-logloss:0.412761\teval-logloss:0.41403\n",
      "[54]\ttrain-logloss:0.412538\teval-logloss:0.413815\n",
      "[55]\ttrain-logloss:0.412267\teval-logloss:0.413574\n",
      "[56]\ttrain-logloss:0.412141\teval-logloss:0.41345\n",
      "[57]\ttrain-logloss:0.411992\teval-logloss:0.413313\n",
      "[58]\ttrain-logloss:0.411802\teval-logloss:0.413127\n",
      "[59]\ttrain-logloss:0.411595\teval-logloss:0.412914\n",
      "[60]\ttrain-logloss:0.411502\teval-logloss:0.412833\n",
      "[61]\ttrain-logloss:0.41133\teval-logloss:0.412657\n",
      "[62]\ttrain-logloss:0.411182\teval-logloss:0.412536\n",
      "[63]\ttrain-logloss:0.410978\teval-logloss:0.412339\n",
      "[64]\ttrain-logloss:0.410857\teval-logloss:0.412238\n",
      "[65]\ttrain-logloss:0.410672\teval-logloss:0.41206\n",
      "[66]\ttrain-logloss:0.410547\teval-logloss:0.411965\n",
      "[67]\ttrain-logloss:0.410384\teval-logloss:0.411808\n",
      "[68]\ttrain-logloss:0.410266\teval-logloss:0.411698\n",
      "[69]\ttrain-logloss:0.409953\teval-logloss:0.411408\n",
      "[70]\ttrain-logloss:0.409885\teval-logloss:0.411342\n",
      "[71]\ttrain-logloss:0.409768\teval-logloss:0.411262\n",
      "[72]\ttrain-logloss:0.409633\teval-logloss:0.411144\n",
      "[73]\ttrain-logloss:0.409546\teval-logloss:0.411063\n",
      "[74]\ttrain-logloss:0.409468\teval-logloss:0.411003\n",
      "[75]\ttrain-logloss:0.409314\teval-logloss:0.410868\n",
      "[76]\ttrain-logloss:0.409136\teval-logloss:0.410702\n",
      "[77]\ttrain-logloss:0.409036\teval-logloss:0.410592\n",
      "[78]\ttrain-logloss:0.408706\teval-logloss:0.410316\n",
      "[79]\ttrain-logloss:0.408608\teval-logloss:0.410226\n",
      "[80]\ttrain-logloss:0.408517\teval-logloss:0.41015\n",
      "[81]\ttrain-logloss:0.408446\teval-logloss:0.41008\n",
      "[82]\ttrain-logloss:0.408164\teval-logloss:0.409835\n",
      "[83]\ttrain-logloss:0.408062\teval-logloss:0.409746\n",
      "[84]\ttrain-logloss:0.407919\teval-logloss:0.409628\n",
      "[85]\ttrain-logloss:0.407757\teval-logloss:0.409457\n",
      "[86]\ttrain-logloss:0.407614\teval-logloss:0.409318\n",
      "[87]\ttrain-logloss:0.407421\teval-logloss:0.40916\n",
      "[88]\ttrain-logloss:0.40737\teval-logloss:0.409113\n",
      "[89]\ttrain-logloss:0.407301\teval-logloss:0.409064\n",
      "[90]\ttrain-logloss:0.407224\teval-logloss:0.408999\n",
      "[91]\ttrain-logloss:0.407149\teval-logloss:0.408935\n",
      "[92]\ttrain-logloss:0.406966\teval-logloss:0.408762\n",
      "[93]\ttrain-logloss:0.406783\teval-logloss:0.408604\n",
      "[94]\ttrain-logloss:0.406727\teval-logloss:0.408548\n",
      "[95]\ttrain-logloss:0.40661\teval-logloss:0.408455\n",
      "[96]\ttrain-logloss:0.406514\teval-logloss:0.408377\n",
      "[97]\ttrain-logloss:0.406396\teval-logloss:0.408263\n",
      "[98]\ttrain-logloss:0.406261\teval-logloss:0.408159\n",
      "[99]\ttrain-logloss:0.40613\teval-logloss:0.408039\n",
      "[100]\ttrain-logloss:0.406038\teval-logloss:0.407954\n",
      "[101]\ttrain-logloss:0.405962\teval-logloss:0.407872\n",
      "[102]\ttrain-logloss:0.405841\teval-logloss:0.407774\n",
      "[103]\ttrain-logloss:0.405767\teval-logloss:0.407721\n",
      "[104]\ttrain-logloss:0.405717\teval-logloss:0.407674\n",
      "[105]\ttrain-logloss:0.405654\teval-logloss:0.407619\n",
      "[106]\ttrain-logloss:0.405615\teval-logloss:0.407582\n",
      "[107]\ttrain-logloss:0.405513\teval-logloss:0.407487\n",
      "[108]\ttrain-logloss:0.405457\teval-logloss:0.407445\n",
      "[109]\ttrain-logloss:0.405383\teval-logloss:0.407379\n",
      "[110]\ttrain-logloss:0.405321\teval-logloss:0.407327\n",
      "[111]\ttrain-logloss:0.40527\teval-logloss:0.407289\n",
      "[112]\ttrain-logloss:0.405204\teval-logloss:0.407231\n",
      "[113]\ttrain-logloss:0.4051\teval-logloss:0.407138\n",
      "[114]\ttrain-logloss:0.405065\teval-logloss:0.407108\n",
      "[115]\ttrain-logloss:0.405014\teval-logloss:0.40708\n",
      "[116]\ttrain-logloss:0.404949\teval-logloss:0.407036\n",
      "[117]\ttrain-logloss:0.404917\teval-logloss:0.407019\n",
      "[118]\ttrain-logloss:0.404852\teval-logloss:0.406968\n",
      "[119]\ttrain-logloss:0.404778\teval-logloss:0.406898\n",
      "[120]\ttrain-logloss:0.404709\teval-logloss:0.406843\n",
      "[121]\ttrain-logloss:0.404631\teval-logloss:0.40679\n",
      "[122]\ttrain-logloss:0.404534\teval-logloss:0.406706\n",
      "[123]\ttrain-logloss:0.404472\teval-logloss:0.406667\n",
      "[124]\ttrain-logloss:0.40441\teval-logloss:0.406604\n",
      "[125]\ttrain-logloss:0.404349\teval-logloss:0.406563\n",
      "[126]\ttrain-logloss:0.404262\teval-logloss:0.406484\n",
      "[127]\ttrain-logloss:0.404168\teval-logloss:0.406419\n",
      "[128]\ttrain-logloss:0.404136\teval-logloss:0.406397\n",
      "[129]\ttrain-logloss:0.404097\teval-logloss:0.406368\n",
      "[130]\ttrain-logloss:0.404016\teval-logloss:0.406302\n",
      "[131]\ttrain-logloss:0.403964\teval-logloss:0.406259\n",
      "[132]\ttrain-logloss:0.403933\teval-logloss:0.406248\n",
      "[133]\ttrain-logloss:0.403899\teval-logloss:0.406226\n",
      "[134]\ttrain-logloss:0.403845\teval-logloss:0.406191\n",
      "[135]\ttrain-logloss:0.403785\teval-logloss:0.406131\n",
      "[136]\ttrain-logloss:0.403698\teval-logloss:0.406073\n",
      "[137]\ttrain-logloss:0.40364\teval-logloss:0.40602\n",
      "[138]\ttrain-logloss:0.403559\teval-logloss:0.405959\n",
      "[139]\ttrain-logloss:0.403499\teval-logloss:0.405906\n",
      "[140]\ttrain-logloss:0.40341\teval-logloss:0.405839\n",
      "[141]\ttrain-logloss:0.403348\teval-logloss:0.405797\n",
      "[142]\ttrain-logloss:0.403319\teval-logloss:0.405781\n",
      "[143]\ttrain-logloss:0.403228\teval-logloss:0.405703\n",
      "[144]\ttrain-logloss:0.403186\teval-logloss:0.405684\n",
      "[145]\ttrain-logloss:0.403176\teval-logloss:0.405673\n",
      "[146]\ttrain-logloss:0.403143\teval-logloss:0.405651\n",
      "[147]\ttrain-logloss:0.403072\teval-logloss:0.405584\n",
      "[148]\ttrain-logloss:0.403037\teval-logloss:0.405568\n",
      "[149]\ttrain-logloss:0.402974\teval-logloss:0.405524\n",
      "[150]\ttrain-logloss:0.402884\teval-logloss:0.405443\n",
      "[151]\ttrain-logloss:0.402859\teval-logloss:0.405435\n",
      "[152]\ttrain-logloss:0.402766\teval-logloss:0.405351\n",
      "[153]\ttrain-logloss:0.402674\teval-logloss:0.405268\n",
      "[154]\ttrain-logloss:0.402614\teval-logloss:0.40522\n",
      "[155]\ttrain-logloss:0.402594\teval-logloss:0.405206\n",
      "[156]\ttrain-logloss:0.402566\teval-logloss:0.405193\n",
      "[157]\ttrain-logloss:0.402496\teval-logloss:0.405131\n",
      "[158]\ttrain-logloss:0.40247\teval-logloss:0.405121\n",
      "[159]\ttrain-logloss:0.402423\teval-logloss:0.405089\n",
      "[160]\ttrain-logloss:0.402399\teval-logloss:0.405077\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[161]\ttrain-logloss:0.402341\teval-logloss:0.405034\n",
      "[162]\ttrain-logloss:0.402307\teval-logloss:0.405011\n",
      "[163]\ttrain-logloss:0.402286\teval-logloss:0.405\n",
      "[164]\ttrain-logloss:0.402218\teval-logloss:0.404934\n",
      "[165]\ttrain-logloss:0.402188\teval-logloss:0.404908\n",
      "[166]\ttrain-logloss:0.402158\teval-logloss:0.404883\n",
      "[167]\ttrain-logloss:0.402128\teval-logloss:0.40486\n",
      "[168]\ttrain-logloss:0.402092\teval-logloss:0.40485\n",
      "[169]\ttrain-logloss:0.402039\teval-logloss:0.404823\n",
      "[170]\ttrain-logloss:0.401968\teval-logloss:0.404758\n",
      "[171]\ttrain-logloss:0.401911\teval-logloss:0.404704\n",
      "[172]\ttrain-logloss:0.401889\teval-logloss:0.404691\n",
      "[173]\ttrain-logloss:0.401846\teval-logloss:0.404652\n",
      "[174]\ttrain-logloss:0.401816\teval-logloss:0.404642\n",
      "[175]\ttrain-logloss:0.401726\teval-logloss:0.404589\n",
      "[176]\ttrain-logloss:0.401669\teval-logloss:0.404541\n",
      "[177]\ttrain-logloss:0.401629\teval-logloss:0.404521\n",
      "[178]\ttrain-logloss:0.401597\teval-logloss:0.404497\n",
      "[179]\ttrain-logloss:0.401561\teval-logloss:0.404473\n",
      "[180]\ttrain-logloss:0.40151\teval-logloss:0.404441\n",
      "[181]\ttrain-logloss:0.401445\teval-logloss:0.40438\n",
      "[182]\ttrain-logloss:0.401411\teval-logloss:0.404359\n",
      "[183]\ttrain-logloss:0.401394\teval-logloss:0.404348\n",
      "[184]\ttrain-logloss:0.401359\teval-logloss:0.404326\n",
      "[185]\ttrain-logloss:0.401315\teval-logloss:0.404285\n",
      "[186]\ttrain-logloss:0.401253\teval-logloss:0.404246\n",
      "[187]\ttrain-logloss:0.401216\teval-logloss:0.404226\n",
      "[188]\ttrain-logloss:0.401192\teval-logloss:0.40421\n",
      "[189]\ttrain-logloss:0.401159\teval-logloss:0.404186\n",
      "[190]\ttrain-logloss:0.401137\teval-logloss:0.404173\n",
      "[191]\ttrain-logloss:0.401077\teval-logloss:0.404115\n",
      "[192]\ttrain-logloss:0.40104\teval-logloss:0.404071\n",
      "[193]\ttrain-logloss:0.401018\teval-logloss:0.404056\n",
      "[194]\ttrain-logloss:0.400969\teval-logloss:0.404018\n",
      "[195]\ttrain-logloss:0.400946\teval-logloss:0.404011\n",
      "[196]\ttrain-logloss:0.400911\teval-logloss:0.404001\n",
      "[197]\ttrain-logloss:0.400883\teval-logloss:0.404\n",
      "[198]\ttrain-logloss:0.400866\teval-logloss:0.403999\n",
      "[199]\ttrain-logloss:0.400786\teval-logloss:0.403922\n",
      "[200]\ttrain-logloss:0.400774\teval-logloss:0.403923\n",
      "[201]\ttrain-logloss:0.40073\teval-logloss:0.403899\n",
      "[202]\ttrain-logloss:0.400705\teval-logloss:0.403885\n",
      "[203]\ttrain-logloss:0.400691\teval-logloss:0.40388\n",
      "[204]\ttrain-logloss:0.400662\teval-logloss:0.403872\n",
      "[205]\ttrain-logloss:0.400647\teval-logloss:0.403873\n",
      "[206]\ttrain-logloss:0.400601\teval-logloss:0.403841\n",
      "[207]\ttrain-logloss:0.400592\teval-logloss:0.403837\n",
      "[208]\ttrain-logloss:0.40057\teval-logloss:0.403832\n",
      "[209]\ttrain-logloss:0.400553\teval-logloss:0.403826\n",
      "[210]\ttrain-logloss:0.400513\teval-logloss:0.403798\n",
      "[211]\ttrain-logloss:0.400478\teval-logloss:0.403777\n",
      "[212]\ttrain-logloss:0.400455\teval-logloss:0.403779\n",
      "[213]\ttrain-logloss:0.400441\teval-logloss:0.403776\n",
      "[214]\ttrain-logloss:0.400386\teval-logloss:0.40373\n",
      "[215]\ttrain-logloss:0.400331\teval-logloss:0.403681\n",
      "[216]\ttrain-logloss:0.400291\teval-logloss:0.403653\n",
      "[217]\ttrain-logloss:0.400215\teval-logloss:0.403595\n",
      "[218]\ttrain-logloss:0.400184\teval-logloss:0.403579\n",
      "[219]\ttrain-logloss:0.400157\teval-logloss:0.403566\n",
      "[220]\ttrain-logloss:0.400145\teval-logloss:0.403566\n",
      "[221]\ttrain-logloss:0.400109\teval-logloss:0.403548\n",
      "[222]\ttrain-logloss:0.400079\teval-logloss:0.40353\n",
      "[223]\ttrain-logloss:0.400037\teval-logloss:0.403498\n",
      "[224]\ttrain-logloss:0.400003\teval-logloss:0.403484\n",
      "[225]\ttrain-logloss:0.399988\teval-logloss:0.403473\n",
      "[226]\ttrain-logloss:0.399955\teval-logloss:0.403446\n",
      "[227]\ttrain-logloss:0.399902\teval-logloss:0.403409\n",
      "[228]\ttrain-logloss:0.399886\teval-logloss:0.403403\n",
      "[229]\ttrain-logloss:0.39986\teval-logloss:0.403393\n",
      "[230]\ttrain-logloss:0.399848\teval-logloss:0.403391\n",
      "[231]\ttrain-logloss:0.399806\teval-logloss:0.403367\n",
      "[232]\ttrain-logloss:0.399772\teval-logloss:0.403355\n",
      "[233]\ttrain-logloss:0.399746\teval-logloss:0.40334\n",
      "[234]\ttrain-logloss:0.39971\teval-logloss:0.403309\n",
      "[235]\ttrain-logloss:0.399688\teval-logloss:0.403297\n",
      "[236]\ttrain-logloss:0.39964\teval-logloss:0.403262\n",
      "[237]\ttrain-logloss:0.399575\teval-logloss:0.40321\n",
      "[238]\ttrain-logloss:0.399535\teval-logloss:0.403181\n",
      "[239]\ttrain-logloss:0.399517\teval-logloss:0.403169\n",
      "[240]\ttrain-logloss:0.399477\teval-logloss:0.403151\n",
      "[241]\ttrain-logloss:0.399443\teval-logloss:0.403127\n",
      "[242]\ttrain-logloss:0.399422\teval-logloss:0.403124\n",
      "[243]\ttrain-logloss:0.399406\teval-logloss:0.403121\n",
      "[244]\ttrain-logloss:0.399389\teval-logloss:0.40312\n",
      "[245]\ttrain-logloss:0.399346\teval-logloss:0.403092\n",
      "[246]\ttrain-logloss:0.399303\teval-logloss:0.403066\n",
      "[247]\ttrain-logloss:0.399254\teval-logloss:0.403028\n",
      "[248]\ttrain-logloss:0.399227\teval-logloss:0.403013\n",
      "[249]\ttrain-logloss:0.399195\teval-logloss:0.402997\n",
      "[250]\ttrain-logloss:0.399152\teval-logloss:0.402965\n",
      "[251]\ttrain-logloss:0.399126\teval-logloss:0.402949\n",
      "[252]\ttrain-logloss:0.399116\teval-logloss:0.402944\n",
      "[253]\ttrain-logloss:0.399079\teval-logloss:0.402915\n",
      "[254]\ttrain-logloss:0.399065\teval-logloss:0.402905\n",
      "[255]\ttrain-logloss:0.399038\teval-logloss:0.402892\n",
      "[256]\ttrain-logloss:0.399019\teval-logloss:0.402887\n",
      "[257]\ttrain-logloss:0.399006\teval-logloss:0.402883\n",
      "[258]\ttrain-logloss:0.398993\teval-logloss:0.402881\n",
      "[259]\ttrain-logloss:0.398973\teval-logloss:0.402872\n"
     ]
    }
   ],
   "source": [
    "features = ['C1', 'banner_pos', 'device_type', 'device_conn_type', 'C14',\n",
    "       'C15', 'C16', 'C17', 'C18', 'C19', 'C20', 'C21', 'time',\n",
    "       'site_id_int', 'site_domain_int', 'site_category_int', 'app_id_int',\n",
    "       'app_domain_int', 'app_category_int', 'device_id_int', 'device_ip_int',\n",
    "       'device_model_int', 'day_of_week_int']\n",
    "run_default_test(train, y_target, features, 'click')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
